Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
- překrývající se vstup a výstup
- asynchronní procedurální volání
- objekty kritické sekce
- podmínkové proměnné
- štíhlé zámky čtenář/zapisovatel
- jednorázová inicializace
- synchronizovaný přístup k proměnným
- vzájemně propletené jednosměrně propojené seznamy
- časovačové fronty
- Makro MemoryBarrier
Další informace o synchronizaci naleznete v tématu Problémy se synchronizací a multiprocesorem.