Sdílet prostřednictvím


Úvod do rutin ERESOURCE

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: