Vékony olvasó/író (SRW) zárolások
A vékony olvasó/író (SRW) zárolások lehetővé teszik, hogy egyetlen folyamat szálai hozzáférjenek a megosztott erőforrásokhoz; ezek a sebességre vannak optimalizálva, és nagyon kevés memóriát foglalnak el. A vékony olvasó-író zárolások nem oszthatók meg a folyamatok között.
Az olvasószálak egy megosztott erőforrásból olvasnak adatokat, míg az írószálak adatokat írnak egy megosztott erőforrásba. Ha több szál olvas és ír egy megosztott erőforrást, a kizárólagos zárolások, például egy kritikus szakasz vagy a mutex szűk keresztmetszetté válhatnak, ha az olvasószálak folyamatosan futnak, de az írási műveletek ritkák.
Az SRW-zárolások két módot biztosítanak, amelyekben a szálak hozzáférhetnek egy megosztott erőforráshoz:
megosztott módú, amely megosztott írásvédett hozzáférést biztosít több olvasószálhoz, amely lehetővé teszi számukra, hogy egyszerre olvassák az adatokat a megosztott erőforrásból. Ha az olvasási műveletek túllépik az írási műveleteket, ez az egyidejűség növeli a teljesítményt és az átviteli sebességet a kritikus szakaszokhoz képest.
Jegyzet
A megosztott módú SRW-zárolásokat nem szabad rekurzív módon beszerezni, mivel ez holtpontokhoz vezethet, ha kizárólagos beszerzéssel kombinálják.
exkluzív módú, amely olvasási/írási hozzáférést biztosít egyszerre egy írószálhoz. Ha a zárolást kizárólagos módban szerezték be, más szál nem férhet hozzá a megosztott erőforráshoz, amíg az író fel nem oldja a zárolást.
Jegyzet
Az exkluzív módú SRW-zárolások nem szerezhetők be rekurzív módon. Ha egy szál megpróbál beszerezni egy már meglévő zárolást, a kísérlet meghiúsul (TryAcquireSRWLockExclusive) vagy holtpont (AcquireSRWLockExclusiveesetén)
Egyetlen SRW-zárolás bármelyik módban beszerezhető; az olvasószálak közös módban szerezhetik be, míg az írószálak exkluzív módban szerezhetik be. Nincs garancia arra vonatkozóan, hogy a tulajdonjogot kérő szálak milyen sorrendben kapnak tulajdonjogot; Az SRW-zárak nem tisztességesek, és nem is FIFO.
Az SRW-zárolás a mutató mérete. Ennek az az előnye, hogy gyorsan frissítheti a zárolási állapotot. A hátránya, hogy nagyon kevés állapotinformáció tárolható, így az SRW-zárolások nem észlelik a helytelen rekurzív használatot megosztott módban. Ezenkívül egy megosztott módban SRW-zárolást birtokoló szál nem tudja kizárólagos módra frissíteni a zárolás tulajdonjogát.
A hívónak ki kell foglalnia egy SRWLOCK-struktúrát, és inicializálnia kell azt InitializeSRWLock meghívásával (a struktúra dinamikus inicializálásához), vagy az állandó SRWLOCK_INIT hozzá kell rendelnie a struktúraváltozóhoz (a struktúra statikus inicializálásához).
Az Application Verifier használatával megkeresheti az SRW-zárolások rekurzív (reentrant) használatát.
Az alábbiakban az SRW zárolási függvényei szerepelnek.
SRW lock függvény | Leírás |
---|---|
AcquireSRWLockExclusive | Exkluzív módban szerez be egy SRW-zárolást. |
AcquireSRWLockShared | SRW-zárolást szerez be megosztott módban. |
InitializeSRWLock | SRW-zárolás inicializálása. |
ReleaseSRWLockExclusive | Kibocsát egy kizárólagos módban megnyitott SRW-zárolást. |
ReleaseSRWLockShared | A megosztott módban megnyitott SRW-zárolást oldja fel. |
SleepConditionVariableSRW | A megadott feltételváltozón alszik, és a megadott zárolást atomi műveletként oldja fel. |
TryAcquireSRWLockExclusive | Egy vékony olvasó/író (SRW) zárolásának kizárólagos módban történő beszerzésére tett kísérlet. Ha a hívás sikeres, a hívó szál átveszi a zárolás tulajdonjogát. |
TryAcquireSRWLockShared | Egy vékony olvasó/író (SRW) zárolásának beszerzése megosztott módban. Ha a hívás sikeres, a hívó szál átveszi a zárolás tulajdonjogát. |