Synchronisierungsobjekte

Ein Synchronisierungsobjekt ist ein Objekt, dessen Handle in einer der Wartefunktionen angegeben werden kann, um die Ausführung mehrerer Threads zu koordinieren. Mehrere Prozesse können über ein Handle für dasselbe Synchronisierungsobjekt verfügen, wodurch die Interprozesssynchronisierung möglich ist.

Die folgenden Objekttypen werden ausschließlich für die Synchronisierung bereitgestellt.

type BESCHREIBUNG
Ereignis Benachrichtigt einen oder mehrere wartende Threads über das Eintreten eines Ereignisses. Weitere Informationen finden Sie unter Ereignisobjekte.
Mutex Kann jeweils nur einem Thread gehören, sodass Threads den sich gegenseitig ausschließenden Zugriff auf eine freigegebene Ressource koordinieren können. Weitere Informationen finden Sie unter Mutex-Objekte.
Semaphore Behält eine Anzahl zwischen null und einem bestimmten Höchstwert bei, wodurch die Anzahl von Threads begrenzt wird, die gleichzeitig auf eine freigegebene Ressource zugreifen. Weitere Informationen finden Sie unter Semaphore-Objekte.
Wartebarer Timer Benachrichtigt einen oder mehrere wartenden Threads, dass eine angegebene Zeit eingetroffen ist. Weitere Informationen finden Sie unter Wartebare Timerobjekte.

 

Obwohl für andere Zwecke verfügbar, können die folgenden Objekte auch für die Synchronisierung verwendet werden.

Object BESCHREIBUNG
Änderungsbenachrichtigung Der Von der FindFirstChangeNotification-Funktion erstellte Zustand wird auf signalisiert festgelegt, wenn ein angegebener Änderungstyp in einem angegebenen Verzeichnis oder einer angegebenen Verzeichnisstruktur auftritt. Weitere Informationen finden Sie unter Abrufen von Verzeichnisänderungsbenachrichtigungen.
Konsoleneingabe Wird beim Erstellen einer Konsole erstellt. Das Handle für die Konsoleneingabe wird von der CreateFile-Funktion zurückgegeben, wenn CONIN$ angegeben wird, oder von der GetStdHandle-Funktion . Der Zustand wird auf signalisiert festgelegt, wenn im Eingabepuffer der Konsole ungelesene Eingaben vorhanden sind, und auf nicht signalisiert festgelegt, wenn der Eingabepuffer leer ist. Weitere Informationen zu Konsolen finden Sie unter Zeichenmodusanwendungen.
Auftrag Erstellt durch Aufrufen der CreateJobObject-Funktion . Der Status eines Auftragsobjekts wird auf signalisiert festgelegt, wenn alle prozesse beendet werden, da das angegebene Zeitlimit für das Auftragsende überschritten wurde. Weitere Informationen zu Auftragsobjekten finden Sie unter Auftragsobjekte.
Benachrichtigung zu Speicherressourcen Erstellt von der Funktion CreateMemoryResourceNotification . Sein Zustand wird auf signalisiert festgelegt, wenn ein angegebener Änderungstyp im physischen Speicher auftritt. Weitere Informationen zum Arbeitsspeicher finden Sie unter Arbeitsspeicherverwaltung.
Prozess Erstellt durch Aufrufen der CreateProcess-Funktion . Der Status wird auf nicht signalisiert festgelegt, während der Prozess ausgeführt wird, und auf signalisiert, wenn der Prozess beendet wird. Weitere Informationen zu Prozessen finden Sie unter Prozesse und Threads.
Thread Wird erstellt, wenn ein neuer Thread erstellt wird, indem die Funktion CreateProcess, CreateThread oder CreateRemoteThread aufgerufen wird. Der Status wird auf nicht signalisiert festgelegt, während der Thread ausgeführt wird, und auf signalisiert, wenn der Thread beendet wird. Weitere Informationen zu Threads finden Sie unter Prozesse und Threads.

 

Unter bestimmten Umständen können Sie auch eine Datei, eine Benannte Pipe oder ein Kommunikationsgerät als Synchronisierungsobjekt verwenden. von ihrer Verwendung für diesen Zweck wird jedoch abgeraten. Verwenden Sie stattdessen asynchrone E/A, und warten Sie auf das Ereignisobjekt, das in der OVERLAPPED-Struktur festgelegt ist . Es ist sicherer, das Ereignisobjekt aufgrund der Verwirrung zu verwenden, die auftreten kann, wenn mehrere gleichzeitige überlappende Vorgänge für dieselbe Datei, named pipe oder ein Kommunikationsgerät ausgeführt werden. In dieser Situation gibt es keine Möglichkeit, zu wissen, welcher Vorgang dazu geführt hat, dass der Zustand des Objekts signalisiert wird.

Weitere Informationen zu E/A-Vorgängen für Dateien, Named Pipes oder Kommunikation finden Sie unter Synchronisierung und überlappende Eingabe und Ausgabe.