Share via


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. In manchen Fällen stehen noch stärkere Garantien zur Verfügung – z. B. die unten beschriebenen iostream-Standardobjekte und Typen, die speziell für das Multithreading entwickelt wurden (wie diejenigen in <atomic>).

Ein Objekt ist threadsicher zum Lesen aus mehreren Threads. 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, aus einer Instanz eines Typs zu lesen oder in diese zu schreiben, wenn ein anderer Thread aus einer anderen Instanz desselben Typs liest oder in diese schreibt. Im Fall zweier Objekte desselben Typs namens Objekt A und Objekt B ist es sicher, wenn Thread 1 in Objekt A schreibt und in Thread 2 aus Objekt B gelesen wird.

shared_ptr

Mehrere Threads können gleichzeitig verschiedene shared_ptr-Objekte auslesen und in diese schreiben, auch wenn die Objekte Kopien sind, die denselben Besitzer haben.

iostream

Die iostream-Standardobjekte cin, cout, cerr, clog, wcin, wcout, wcerr und wclog folgen denselben Regeln wie die anderen Klassen, mit der Ausnahme, dass es sicher ist, wenn in mehreren Threads in ein Objekt geschrieben wird. Thread 1 kann z. B zur selben Zeit in cout schreiben wie Thread 2. 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 es als Schreibvorgang angesehen, da der Zustand der Klasse geändert wird.

Siehe auch

Referenz

Übersicht über die C++-Standardbibliothek