Synkroniseringsobjekt
Ett synkroniseringsobjekt är ett objekt vars handtag kan anges i någon av väntefunktioner för att samordna körningen av flera trådar. Mer än en process kan ha ett handtag till samma synkroniseringsobjekt, vilket gör det möjligt att synkronisera mellan processer.
Följande objekttyper tillhandahålls exklusivt för synkronisering.
Typ | Beskrivning |
---|---|
Händelse | Meddelar en eller flera väntande trådar om att en händelse har inträffat. Mer information finns i händelseobjekt. |
Mutex | Kan bara ägas av en tråd i taget, vilket gör att trådar kan samordna ömsesidigt exklusiv åtkomst till en delad resurs. Mer information finns i Mutex-objekt. |
Semafor | Upprätthåller ett antal mellan noll och ett visst högsta värde, vilket begränsar antalet trådar som samtidigt har åtkomst till en delad resurs. Mer information finns i Semaforobjekt. |
Väntetidstimer | Meddelar en eller flera väntande trådar att en angiven tid har anlänt. Mer information finns i Väntebara timerobjekt. |
Även om de är tillgängliga för andra användningsområden kan följande objekt också användas för synkronisering.
Objekt | Beskrivning |
---|---|
Ändra meddelande | Skapad av funktionen FindFirstChangeNotification anges dess tillstånd till signalerat när en angiven typ av ändring inträffar inom ett angivet katalog- eller katalogträd. Mer information finns i Hämta katalogändringsmeddelanden. |
Konsolindata | Skapas när en konsol skapas. Referensen till konsolindata returneras av funktionen CreateFile när CONIN$ anges, eller av funktionen GetStdHandle. Dess tillstånd är inställt på signal när det finns olästa indata i konsolens indatabuffert och inställt på icke-signalerad när indatabufferten är tom. Mer information om konsoler finns i Character-Mode Program |
Jobb | Skapades genom att anropa funktionen CreateJobObject. Tillståndet för ett jobbobjekt är inställt på signaler när alla dess processer avslutas eftersom den angivna tidsgränsen för jobbslut har överskridits. Mer information om jobbobjekt finns i Jobbobjekt. |
Meddelande om minnesresurs | Skapad av funktionen CreateMemoryResourceNotification. Dess tillstånd är inställt på signalerad när en angiven typ av ändring sker i fysiskt minne. Mer information om minne finns i Minneshantering. |
Process | Skapades genom att anropa funktionen CreateProcess. Dess tillstånd är inställt på nonsignaled medan processen körs och anges till signalerad när processen avslutas. Mer information om processer finns i Processer och trådar. |
Tråd | Skapas när en ny tråd skapas genom att anropa funktionen CreateProcess, CreateThreadeller CreateRemoteThread. Dess tillstånd är inställt på nonsignaled medan tråden körs och anges till signalerad när tråden avslutas. Mer information om trådar finns i Processer och trådar. |
I vissa fall kan du också använda en fil, namngiven pipe eller kommunikationsenhet som ett synkroniseringsobjekt. Användning av dem för detta ändamål rekommenderas dock inte. Använd i stället asynkront I/O och vänta på händelseobjektet som angetts i OVERLAPPED- struktur. Det är säkrare att använda händelseobjektet på grund av den förvirring som kan uppstå när flera samtidiga överlappande åtgärder utförs på samma fil, namngivna pipe eller kommunikationsenhet. I den här situationen finns det inget sätt att veta vilken åtgärd som orsakade att objektets tillstånd signalerades.
Mer information om I/O-åtgärder för filer, namngivna pipes eller kommunikation finns i Synkronisering och Överlappade indata och utdata.