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. Es werden manchmal stärkere Garantien bereitgestellt, z. B. die standardmäßigen Iostream-Objekte, wie unten beschrieben, und Typen, die für Multithreading vorgesehen sind, z. B. 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 es sich bei den Objekten um Kopien handelt, die den Besitz teilen.

iostream

Die standardmäßigen Iostream-Objekte cin, cout, , clogcerr, wcerrwcinwcoutund wclog befolgen die 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. zur gleichen Zeit wie 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 wird er als Schreibvorgang betrachtet, da der Zustand der Klasse geändert wird.

Siehe auch

Übersicht über die C++-Standardbibliothek