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.
Systém poskytuje rutiny pro získávání a vydávání struktur ERESOURCE a také pro zkoumání jejich aktuálního stavu.
Získání a uvolnění struktury ERESOURCE
Ovladače můžou používat struktury ERESOURCE k implementaci exkluzivní/sdílené synchronizace. Exkluzivní/sdílená synchronizace funguje takto:
Libovolný počet vláken může získat ERESOURCE ve sdíleném režimu.
Pouze jedno vlákno může získat ERESOURCE výhradně. ERESOURCE lze získat pouze v případě, že žádná vlákna již nebyla získána jako sdílená.
Vlákno, které momentálně nemůže získat ERESOURCE, může být podle potřeby umístěno do stavu čekání, dokud nebude možné získat ERESOURCE. Systém udržuje dva seznamy vláken, které čekají na ERESOURCE: seznam exkluzivních číšníků a seznam sdílených číšníků.
Typickým použitím exkluzivní/sdílené synchronizace je implementace zámku pro čtení a zápis. Zámek pro čtení a zápis umožňuje několika vláknům provádět operaci čtení, ale najednou může zapisovat pouze jedno vlákno. To lze implementovat přímo z hlediska získání ERESOURCE.
Ovladač přidělí úložiště pro ERESOURCE a inicializuje ho pomocí ExInitializeResourceLite. Systém udržuje seznam všech ERESOURCE struktur, které se používají. Pokud ovladač již nevyžaduje konkrétní ERESOURCE, musí volat ExDeleteResourceLite, aby ho odstranil ze seznamu systému. Ovladač může také znovu použít ERESOURCE voláním ExReinitializeResourceLite.
Ovladače můžou na serveru ERESOURCE provádět následující základní operace:
Získejte prostředek ERESOURCE ve sdíleném režimu s ExAcquireResourceSharedLite. Tato rutina získá prostředek pouze v případě, že prostředek nebyl dosud získán výlučně a neexistují žádní výluční čekatelé.
Získejte ERESOURCE exkluzivně pomocí ExAcquireResourceExclusiveLite. Tato rutina získá prostředek za předpokladu, že ještě nebyl získán ani výhradně, ani jako sdílený.
Převeďte výhradní získání na sdílené získání pomocí ExConvertExclusiveToSharedLite.
Uvolnění získaného prostředku pomocí ExReleaseResourceLite
Parametr WaitExAcquireResourceSharedLite a ExAcquireResourceExclusiveLite určuje, zda aktuální vlákno čeká na získání ERESOURCE. Pokud zadáte hodnotu NEPRAVDA a ERESOURCE nelze získat, rutina vrátí hodnotu NEPRAVDA. Pokud zadáte hodnotu PRAVDA, aktuální vlákno se umístí do příslušného seznamu čekání pro ERESOURCE.
Zkoumání stavu struktury ERESOURCE
Ovladač může také určit aktuální stav ERESOURCE následujícím způsobem:
Pomocí funkce ExIsResourceAcquiredLite nebo ExIsResourceAcquiredSharedLite určete , jestli již byl zdroj ERESOURCE získán jako sdílený nebo exkluzivní. Pomocí funkce ExIsResourceAcquiredExclusiveLite zkontrolujte, jestli byl ERESOURCE získán výhradně.
Pomocí exGetSharedWaiterCount určete počet sdílených číšníků pro ERESOURCE a pomocí exGetExclusiveWaiterCount určete počet výhradních číšníků pro ERESOURCE.