Synchronisatieobjecten
Een synchronisatieobject is een object waarvan de ingang kan worden opgegeven in een van de wachtfuncties om de uitvoering van meerdere threads te coördineren. Meer dan één proces kan een ingang hebben voor hetzelfde synchronisatieobject, waardoor synchronisatie tussen processen mogelijk is.
De volgende objecttypen worden uitsluitend aangeboden voor synchronisatie.
Type | Beschrijving |
---|---|
Gebeurtenis | Hiermee wordt een of meer wachtende threads aangegeven dat er een gebeurtenis is opgetreden. Zie Gebeurtenisobjectenvoor meer informatie. |
Mutex | Kan eigendom zijn van slechts één thread tegelijk, waardoor threads wederzijds exclusieve toegang tot een gedeelde resource kunnen coördineren. Zie Mutex-objectenvoor meer informatie. |
Semafoor | Onderhoudt een telling tussen nul en een bepaalde maximumwaarde, waardoor het aantal threads wordt beperkt dat tegelijkertijd toegang heeft tot een gedeelde resource. Zie Semaphore Objectsvoor meer informatie. |
Wachttijdtimer | Hiermee wordt een of meer wachtende threads aangegeven dat er een opgegeven tijd is aangekomen. Zie Wachtbare timerobjectenvoor meer informatie. |
Hoewel deze beschikbaar zijn voor andere toepassingen, kunnen de volgende objecten ook worden gebruikt voor synchronisatie.
Object | Beschrijving |
---|---|
Melding wijzigen | Gemaakt door de FindFirstChangeNotification functie, wordt de status ingesteld op signalering wanneer een opgegeven type wijziging plaatsvindt binnen een opgegeven map of mapstructuur. Zie Directory Change Notificationsverkrijgen voor meer informatie. |
Console-invoer | Gemaakt wanneer er een console wordt gemaakt. De ingang naar console-invoer wordt geretourneerd door de functie CreateFile wanneer CONIN$ is opgegeven, of door de GetStdHandle--functie. De status wordt ingesteld op signalering wanneer er ongelezen invoer in de invoerbuffer van de console staat en is ingesteld op niet-ondertekend wanneer de invoerbuffer leeg is. Zie Character-Mode Toepassingen voor meer informatie over consoles |
Baan | Gemaakt door de functie CreateJobObject aan te roepen. De status van een taakobject wordt ingesteld op signalering wanneer alle processen worden beëindigd omdat de opgegeven tijdslimiet voor het einde van de taak is overschreden. Zie Taakobjectenvoor meer informatie over taakobjecten. |
Melding van geheugenresource | Gemaakt door de functie CreateMemoryResourceNotification. De status wordt ingesteld op signalering wanneer een opgegeven type wijziging plaatsvindt binnen het fysieke geheugen. Zie Memory Managementvoor meer informatie over geheugen. |
Proces | Gemaakt door de functie CreateProcess aan te roepen. De status wordt ingesteld op niet-ondertekend terwijl het proces wordt uitgevoerd en wordt ingesteld op signalering wanneer het proces wordt beëindigd. Zie processen en threadsvoor meer informatie over processen. |
Draad | Gemaakt wanneer een nieuwe thread wordt gemaakt door de functie CreateProcessaan te roepen, CreateThread-of functie CreateRemoteTh read aan te roepen. De status is ingesteld op niet-ondertekend terwijl de thread wordt uitgevoerd en wordt ingesteld op signalering wanneer de thread wordt beëindigd. Zie processen en threadsvoor meer informatie over threads. |
In sommige gevallen kunt u ook een bestand, pijp of communicatieapparaat gebruiken als synchronisatieobject; hun gebruik voor dit doel wordt echter afgeraden. Gebruik in plaats daarvan asynchrone I/O en wacht op het gebeurtenisobject dat is ingesteld in de OVERLAPPED structuur. Het is veiliger om het gebeurtenisobject te gebruiken vanwege de verwarring die kan optreden wanneer meerdere gelijktijdig overlappende bewerkingen worden uitgevoerd op hetzelfde bestand, de benoemde pijp of het communicatieapparaat. In deze situatie is er geen manier om te weten welke bewerking ervoor heeft gezorgd dat de status van het object wordt gesignaleerd.
Zie Synchronization and Overlapped Input and Outputvoor meer informatie over I/O-bewerkingen op bestanden, benoemde pijpen of communicatie.