Om synkronisering

Om du vill synkronisera åtkomst till en resurs använder du något av synkroniseringsobjekten i någon av väntefunktionerna. Tillståndet för ett synkroniseringsobjekt signaleras antingen eller icke-signalerad. Väntefunktionerna tillåter att en tråd blockerar sin egen körning tills ett angivet icke-signalerat objekt har angetts till det signalerade tillståndet. Mer information finns i Synkronisering mellan processer.

Att välja rätt synkroniseringsprimitiv

Primitiv Scope Performance Reentrant När det bör användas
SRW-lås (Slim Reader/Writer) Enskild process Snabb (vanligtvis i användarläge; kan gå in i kärnan vid konkurrens) No Standardval för läsintensiva arbetsbelastningar i modern kod. Minsta minnesfotavtryck (pekarstorlek).
Kritiskt avsnitt Enskild process Snabb (snurrar sedan kernelvänte) Ja Använd när du behöver återinträdes-/rekursiv låsning i en och samma process. Något större än SRW.
Mutex Processövergripande (namngiven) Långsammare (alltid kernelobjekt) Ja Krävs för synkronisering mellan processer via en namngiven mutex. Också användbart med WaitForMultipleObjects.
Semafor Mellan processer (namngiven) Kernel-objekt N/A Begränsar samtidig åtkomst till en resurspool (t.ex. anslutningspool för N-objekt).
Händelse Mellan processer (namngiven) Kernel-objekt N/A Signalering mellan trådar/processer. Använd för "något hände"-meddelanden, inte för att skydda data.
C++ std::mutex / std::shared_mutex Enskild process Implementeringsdefinierad No Rekommenderas för portabel C++-kod och RAII. Använd när du inte behöver Win32-väntande API:er eller synkronisering mellan processer.

Note

SRW-lås jämfört med kritiska avsnitt: För ny kod som inte kräver rekursiv låsning föredrar du SRW-lås (AcquireSRWLockExclusive/AcquireSRWLockShared). De är mindre, snabbare och stöder läsar-/skrivarsemantik. Kritiska avsnitt är fortfarande lämpliga när du behöver återinträdesbar (rekursiv) låsning av en och samma tråd.

Important

Vanligt misstag: Att använda en Mutex för synkronisering inom processen när ett kritiskt avsnitt eller SRW-lås räcker. Mutexes omfattar alltid en övergång till kernelläge, vilket gör dem betydligt långsammare för högfrekventa åtgärder i en enda process.

Följande är andra synkroniseringsmekanismer:

Mer information om synkronisering finns i Synkronisering och Problem med flera processorer.