Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- überlappende Eingabe und Ausgabe
- asynchrone Prozeduraufrufe
- Kritische Abschnittsobjekte
- Bedingungsvariablen
- schlanke Lese-/Schreibsperren
- Einmalige Initialisierung
- synchronisierter Zugriff auf Variablen
- ineinandergreifende einfach verkettete Listen
- Timerwarteschlangen
- Das MemoryBarrier-Makro
Weitere Informationen zur Synchronisierung finden Sie unter "Synchronisierungs- und Multiprozessorprobleme".