Informationen zur Synchronisierung

Verwenden Sie zum Synchronisieren des Zugriffs auf eine Ressource eines der Synchronisierungsobjekte in einer der Wartefunktionen. Der Status eines Synchronisierungsobjekts wird entweder signalisiert oder nicht signalisiert. Mit den Wartefunktionen kann ein Thread seine eigene Ausführung blockieren, bis ein angegebenes nicht signalisiertes Objekt auf den signalisierten Zustand festgelegt ist. Weitere Informationen finden Sie unter Interprocess-Synchronisierung.

Auswählen des richtigen Synchronisierungsgrundtyps

Primitiv Geltungsbereich Performance reentrant Wann verwenden?
Slim Reader/Writer (SRW) Lock Einzelner Prozess Schnell (typischerweise im Benutzermodus; kann bei Konkurrenz in den Kernel wechseln) No Standardwahl für leselastige Workloads in modernem Code. Kleinster Speicherbedarf (Zeigergröße).
Kritischer Abschnitt Einzelner Prozess Schnell (dreht sich dann in den Kernel-Wartezustand) Yes Verwenden Sie diesen Vorgang, wenn Sie eine erneute/rekursive Sperrung innerhalb eines Prozesses benötigen. Etwas größer als SRW.
Mutex Prozessübergreifend (benannt) Langsamer (immer Kernelobjekt) Yes Erforderlich für die Synchronisierung zwischen Prozessen über einen benannten Mutex. Auch nützlich mit WaitForMultipleObjects.
Semaphor Prozessübergreifend (benannt) Kernel-Objekt N/A Beschränkt den gleichzeitigen Zugriff auf einen Ressourcenpool (z. B. Verbindungspool von N-Elementen).
Event Prozessübergreifend (benannt) Kernel-Objekt N/A Signalisierung zwischen Threads/Prozessen. Wird für "etwas passiert"-Benachrichtigungen verwendet, nicht zum Schutz von Daten.
C++ std::mutex / std::shared_mutex Einzelner Prozess Implementierungsdefiniert No Bevorzugt für tragbaren C++-Code und RAII. Verwenden Sie diese Option, wenn Sie keine Win32-Wait-APIs oder prozessübergreifende Synchronisierung benötigen.

Note

SRW-Sperren im Vergleich zu kritischen Abschnitten: Für neuen Code, der keine rekursive Sperrung erfordert, bevorzugen Sie SRW-Sperren (AcquireSRWLockExclusive/AcquireSRWLockShared). Sie sind kleiner, schneller und unterstützen die Lese-/Schreibsemantik. Kritische Abschnitte sind weiterhin geeignet, wenn Sie einen erneuten (rekursiven) Erwerb durch denselben Thread benötigen.

Important

Häufig auftretender Fehler: Verwenden eines Mutex für die Synchronisierung innerhalb des Prozesses, wenn ein kritischer Abschnitt oder eine SRW-Sperre ausreichen würde. Mutexes beziehen sich immer auf einen Kernelmodusübergang und machen sie für Hochfrequenzvorgänge innerhalb eines einzelnen Prozesses deutlich langsamer.

Es folgen weitere Synchronisierungsmechanismen:

Weitere Informationen zur Synchronisierung finden Sie unter "Synchronisierungs- und Multiprozessorprobleme".