Informace o synchronizaci

Pro synchronizaci přístupu k prostředku použijte jeden z synchronizačních objektů v jedné z funkcí čekání . Stav synchronizačního objektu je buď signalizovaný, nebo nesignalizovaný. Funkce čekání umožňují vláknu blokovat vlastní spuštění, dokud zadaný nepodepsaný objekt je nastaven na signalovaný stav. Další informace naleznete v tématu Synchronizace interprocesů.

Výběr správného primitiva synchronizace

Primitivní Scope Performance Znovu zadat Kdy ho použít
Tenký zámek čtečky/zapisovačky (SRW) Jediný proces Rychlý (obvykle v uživatelském režimu; při kolizi může přejít do režimu jádra) Ne Výchozí volba pro úlohy náročné na čtenáře v moderním kódu Nejmenší paměťová stopa (o velikosti ukazatele).
Kritický oddíl Jeden proces Rychlé (nejprve aktivně čeká, poté čekání v jádře) Ano Použijte, když potřebujete reentrantní/rekurzivní uzamčení v rámci jednoho procesu. Mírně větší než SRW.
Mutex Meziprocesový (pojmenovaný) Pomalejší (vždy objekt jádra) Ano Vyžaduje se pro synchronizaci mezi procesy prostřednictvím pojmenovaného mutexu. Užitečné také s WaitForMultipleObjects.
Semafor Meziprocesový (pojmenovaný) Objekt jádra N/A Omezuje souběžný přístup k fondu zdrojů (např. fond připojení n položek).
Event Křížový proces (pojmenovaný) Objekt jádra N/A Signalizace mezi vlákny/procesy. Používejte pro oznámení typu "něco se stalo", ne pro ochranu dat.
C++ std::mutex / std::shared_mutex Jediný proces Závislé na implementaci Ne Preferováno pro přenositelný kód C++ a RAII. Použijte, pokud nepotřebujete čekací rozhraní API Win32 ani synchronizaci mezi procesy.

Note

SrW locks vs Critical Sections: Pro nový kód, který nevyžaduje rekurzivní uzamčení, preferujte zámky SRW (AcquireSRWLockExclusive/AcquireSRWLockShared). Jsou menší, rychlejší a podporují sémantiku čtení a zápisu. Kritické sekce jsou stále vhodné, pokud potřebujete opakované (rekurzivní) získání zámku týmž vláknem.

Important

Běžná chyba: Použití mutexu pro synchronizaci v rámci procesu, když by postačovala kritická sekce nebo zámek SRW. Mutexy vždy zahrnují přechod v režimu jádra, což je výrazně pomalejší pro vysokofrekvenční operace v rámci jednoho procesu.

Následují další mechanismy synchronizace:

Další informace o synchronizaci naleznete v tématu Problémy se synchronizací a multiprocesorem.