Freigeben über


Einführung in ERESOURCE-Routinen

Das System bietet Routinen zum Abrufen und Freigeben von ERESOURCE-Strukturen sowie zum Untersuchen des aktuellen Zustands.

Abrufen und Freigeben einer ERESOURCE-Struktur

Treiber können die ERESOURCE-Strukturen verwenden, um eine exklusive/freigegebene Synchronisierung zu implementieren. Die exklusive/freigegebene Synchronisierung funktioniert wie folgt:

  • Eine beliebige Anzahl von Threads kann eine ERESOURCE als freigegeben abrufen.

  • Nur ein Thread kann eine ERESOURCE exklusiv abrufen. Die ERESOURCE kann nur exklusiv abgerufen werden, wenn keine Threads sie bereits als freigegeben erworben haben.

Ein Thread, der derzeit keine ERESOURCE abrufen kann, kann optional in einen Wartezustand versetzt werden, bis die ERESOURCE abgerufen werden kann. Das System verwaltet zwei Listen von Threads, die auf eine ERESOURCE warten: eine Liste exklusiver Kellner und eine Liste von freigegebenen Kellnern.

Eine typische Verwendung für die exklusive/freigegebene Synchronisierung ist die Implementierung einer Lese-/Schreibsperre. Eine Lese-/Schreibsperre ermöglicht es mehreren Threads, einen Lesevorgang auszuführen, aber nur ein Thread kann gleichzeitig schreiben. Dies kann direkt im Hinblick auf den Erwerb einer ERESOURCE implementiert werden.

Ein Treiber ordnet den Speicher für eine ERESOURCE zu und initialisiert ihn mit ExInitializeResourceLite. Das System verwaltet eine Liste aller verwendeten ERESOURCE-Strukturen. Wenn der Treiber keine bestimmte ERESOURCE mehr benötigt, muss er ExDeleteResourceLite aufrufen, um ihn aus der Liste des Systems zu löschen. Der Treiber kann auch eine ERESOURCE wiederverwenden, indem ExReinitializeResourceLite aufgerufen wird.

Treiber können die folgenden grundlegenden Vorgänge für eine ERESOURCE ausführen:

Der Wait-Parameter von ExAcquireResourceSharedLite und ExAcquireResourceExclusiveLite bestimmt, ob der aktuelle Thread auf das Abrufen der ERESOURCE wartet. Wenn Sie den Wert FALSE angeben und die ERESOURCE nicht abgerufen werden kann, gibt die Routine FALSE zurück. Wenn Sie den Wert TRUE angeben, wird der aktuelle Thread in die entsprechende Warteliste für die ERESOURCE eingefügt.

Untersuchen des Zustands einer ERESOURCE-Struktur

Ein Treiber kann auch den aktuellen Zustand einer ERESOURCE wie folgt bestimmen: