Zámky čtečky /zapisovače štíhlé čtečky (SRW)
Zámky čtečky/zapisovače (SRW) umožňují přístup ke sdíleným prostředkům vláknům jednoho procesu; jsou optimalizované pro rychlost a zabírají velmi málo paměti. Zámky štíhlé čtečky a zapisovače nelze sdílet napříč procesy.
Vlákna čtenáře čtou data ze sdíleného prostředku, zatímco vlákna zápisu zapisují data do sdíleného prostředku. Při čtení a zápisu více vláken pomocí sdíleného prostředku se může stát kritickým bodem, pokud vlákna čtečky běží nepřetržitě, ale operace zápisu jsou vzácné.
Zámky SRW poskytují dva režimy, ve kterých mají vlákna přístup ke sdílenému prostředku:
sdílený režim, který uděluje sdílený přístup jen pro čtení k více vláknům čtenáře, což jim umožňuje číst data ze sdíleného prostředku souběžně. Pokud operace čtení překračují operace zápisu, zvyšuje tato souběžnost výkon a propustnost v porovnání s kritickými oddíly.
Poznámka
Zámky SRW sdíleného režimu by neměly být získány rekurzivně, protože to může vést k zablokování v kombinaci s výhradním získáním.
exkluzivní režim, který uděluje přístup pro čtení a zápis k jednomu vláknu zapisovače najednou. Po získání zámku ve výhradním režimu nemá žádné jiné vlákno přístup ke sdílenému prostředku, dokud zapisovač zámek neuvolní.
Poznámka
Zámky SRW s výhradním režimem nelze rekurzivně získat. Pokud se vlákno pokusí získat zámek, který už obsahuje, tento pokus selže (pro TryAcquireSRWLockExclusive) nebo zablokování (pro AcquireSRWLockExclusive)
Jeden zámek SRW lze získat v obou režimech; Vlákna čtenáře je mohou získat ve sdíleném režimu, zatímco vlákna zápisu je mohou získat ve výhradním režimu. Neexistuje žádná záruka týkající se pořadí, ve kterém vlákna, která požadují vlastnictví, budou udělena vlastnictví; Zámky SRW nejsou spravedlivé ani FIFO.
Zámek SRW je velikost ukazatele. Výhodou je, že je rychlé aktualizovat stav zámku. Nevýhodou je, že velmi málo informací o stavu lze uložit, takže zámky SRW nezjistí nesprávné rekurzivní použití ve sdíleném režimu. Kromě toho vlákno, které vlastní zámek SRW ve sdíleném režimu, nemůže upgradovat jeho vlastnictví na výhradní režim.
Volající musí přidělit strukturu SRWLOCK a inicializovat ji buď voláním InitializeSRWLock (k dynamické inicializaci struktury) nebo přiřadit konstantu SRWLOCK_INIT proměnné struktury (pro inicializaci struktury staticky).
Pomocí ověřovatele aplikací můžete najít rekurzivní (reentrant) použití zámků SRW.
Následují funkce zámku SRW.
Funkce zámku SRW | Popis |
---|---|
AcquireSRWLockExclusive | Získá zámek SRW ve výhradním režimu. |
AcquireSRWLockShared | Získá zámek SRW ve sdíleném režimu. |
InitializeSRWLock | Inicializace zámku SRW |
ReleaseSRWLockExclusive | Uvolní zámek SRW, který byl otevřen ve výhradním režimu. |
ReleaseSRWLockShared | Uvolní zámek SRW otevřený ve sdíleném režimu. |
SleepConditionVariableSRW | Přepne na zadanou proměnnou podmínky a uvolní zadaný zámek jako atomické operace. |
TryAcquireSRWLockExclusive | Pokusí se získat zámek čtečky/zapisovače (SRW) ve výhradním režimu. Pokud je volání úspěšné, volající vlákno převezme vlastnictví zámku. |
TryAcquireSRWLockShared | Pokusí se získat zámek čtečky/zapisovače (SRW) ve sdíleném režimu. Pokud je volání úspěšné, volající vlákno převezme vlastnictví zámku. |