Threadsicherheit in der C++-Standardbibliothek

Die folgenden Threadsicherheitsregeln gelten für alle Klassen in der C++-Standardbibliothek – dazu gehört wie unten beschrieben auch shared_ptr. Stärkere Garantien werden manchmal bereitgestellt– z. B. die standardmäßigen Iostream-Objekte, wie unten beschrieben, und Typen, die für Multithreading vorgesehen sind, wie dies in <atomic>.

Ein Objekt ist zum Lesen aus mehreren Threads threadsicher. Ein bestimmtes Objekt A kann z. B. sicher gleichzeitig aus Thread 1 und Thread 2 ausgelesen werden.

Wenn durch einen Thread in ein Objekt geschrieben wird, müssen alle Lese- und Schreibvorgänge im Zusammenhang mit diesem Objekt in diesem oder anderen Threads geschützt werden. Wenn z. B. Thread 1 in Objekt A schreibt, muss verhindert werden, dass Thread 2 Objekt A ausliest oder in Objekt A schreibt.

Es ist sicher, eine Instanz eines Typs zu lesen und zu schreiben, auch wenn ein anderer Thread eine andere Instanz desselben Typs liest oder schreibt. Bei bestimmten Objekten A und B desselben Typs ist es beispielsweise sicher, wenn A in Thread 1 geschrieben wird und B in Thread 2 gelesen wird.

shared_ptr

Mehrere Threads können verschiedene shared_ptr Objekte gleichzeitig lesen und schreiben, auch wenn die Objekte Kopien sind, die den Besitz teilen.

iostream

Die standardmäßigen iostream-Objekte cin, cout, wcinwcoutwcerrcerrclogund wclog folgen den gleichen Regeln wie die anderen Klassen, mit dieser Ausnahme: Es ist sicher, in ein Objekt aus mehreren Threads zu schreiben. Thread 1 kann z. B. gleichzeitig mit Thread 2 schreiben cout . Dies kann allerdings zu einer Vermischung der Ausgaben zweier Threads führen.

Hinweis

Das Lesen aus einem Streampuffer wird nicht als Lesevorgang betrachtet. Stattdessen gilt es als Schreibvorgang, da der Status der Klasse geändert wird.

Weitere Informationen

Übersicht über die C++-Standardbibliothek