Tudnivalók a szinkronizálásról

Az erőforráshoz való hozzáférés szinkronizálásához használja az egyik szinkronizálási objektumot az egyik várakozási függvényben. A szinkronizálási objektum állapota jelzett vagy nem jelzett lehet. A várakozási függvények lehetővé teszik, hogy egy szál blokkolja saját végrehajtását, amíg egy megadott, nem jelzett állapotú objektum jelzett állapotba nem kerül. További információ: Folyamatközi szinkronizálás.

A megfelelő szinkronizálási primitív kiválasztása

Primitív Scope Teljesítmény Újraküldés Mikor érdemes használni?
Vékony olvasó/író (SRW) zárolása Egyetlen folyamat Gyors (általában felhasználói módban; versengés esetén beléphet kernelmódba) No Alapértelmezett választás az olvasói terhelésű számítási feladatokhoz a modern kódban. Legkisebb memóriaigény (egy mutató méretével megegyező).
Kritikus szakasz Egyetlen folyamat Gyors (pörgetés, majd kernel-várakozás) Igen Használja, ha egy folyamaton belül reentráns/rekurzív zárolásra van szükség. Kissé nagyobb, mint az SRW.
Mutex Folyamatok közötti (elnevezett) Lassabb (mindig kernelobjektum) Igen A folyamatok egy nevesített mutexen keresztüli szinkronizálásához szükséges. Szintén hasznos a WaitForMultipleObjects.
Szemafor Folyamatok közötti (elnevezett) Kernel-objektum N/A Korlátozza az erőforráskészlethez való egyidejű hozzáférést (például az N-elemek kapcsolatkészletét).
Esemény Folyamatközi (névvel ellátott) Kernel-objektum N/A Jelátvitel szálak/folyamatok között. A "valami történt" értesítésekhez használható, nem az adatok védelméhez.
C++ std::mutex / std::shared_mutex Egyetlen folyamat A megvalósítás által meghatározott No Hordozható C++-kódhoz és a RAII használatához ajánlott. Akkor használja, ha nincs szüksége a Win32 várakozási API-ira vagy a folyamatközi szinkronizálásra.

Note

SRW-zárolások és kritikus szakaszok: Olyan új kód esetén, amely nem igényel rekurzív zárolást, válassza az SRW-zárolásokat (AcquireSRWLockExclusive/AcquireSRWLockShared). Kisebbek, gyorsabbak és támogatják az olvasói/írói szemantikát. A kritikus szakaszok akkor is megfelelőek, ha ugyanazon a szálon kell újrakurzív (rekurzív) beszerzést igényelnie.

Important

Gyakori hiba: Mutex használata folyamaton belüli szinkronizáláshoz, ha egy kritikus szakasz vagy SRW-zárolás elegendő lenne. A mutexek használata mindig kernelmódba való váltással jár, ami jelentősen lassabbá teszi őket az egyetlen folyamaton belüli, nagy gyakoriságú műveletek esetén.

A következő szinkronizálási mechanizmusok a következők:

További információ a szinkronizálásról: Szinkronizálási és többprocesszoros problémák.