Freigeben über


Treiberanmerkungen für ineinandergreifende Operanden

Eine große Familie von Funktionen verwendet als einen ihrer Parameter die Adresse einer Variablen, auf die mithilfe einer verriegelten Prozessoranweisung zugegriffen werden soll. Dies sind atomare Anweisungen zum Lesen durch den Cache, und wenn die Operanden falsch verwendet werden, treten sehr subtile Fehler auf.

Verwenden Sie die folgende Anmerkung für Funktionsparameter, um sie als ineinandergreifenden Operanden zu identifizieren.

Ineinandergreifende Operandenanmerkung BESCHREIBUNG
_Interlocked_operand_ Der Parameter für die kommentierte Funktion ist der Zielopernd einer der ineinandergreifenden Funktionen. Diese Operanden müssen bestimmte zusätzliche Eigenschaften aufweisen.

Funktionsparameter, die mit dem _Interlocked_operand_ kommentiert werden, werden voraussichtlich zwischen Prozessen gemeinsam verwendet. Variablen, die mit dieser Anmerkung verwendet werden, müssen:

  • Als flüchtig deklariert werden.

  • Keine lokale Variable sein. Die Verwendung einer lokalen Variablen deutet in der Regel auf ein Missverständnis der Absicht der Funktion hin. Selbst wenn eine lokale Variable irgendwie gemeinsam genutzt wird, machen system paging-Anforderungen die Adressierung von Variablen in einem anderen Prozess problematisch.

  • Der Zugriff erfolgt nur über eine ineinandergreifenden Funktion. Ohne die explizite Verwendung einer ineinandergreifenden Funktion kann der Vorgang auf veraltete Daten zugreifen, nur im Cache eines einzelnen Prozessors auftreten oder den Rest des Systems verzögert erreichen.

Vom System bereitgestellte Funktionen werden bereits für ineinandergreifende Operanden mit Anmerkungen versehen.

Das folgende Beispiel zeigt die Anmerkung für die InterlockedExchange-Funktion . Diese Anmerkung gibt an, dass auf den Target-Parameter immer mithilfe eines ineinandergreifenden Vorgangs zugegriffen werden muss.

LONG  
InterlockedExchange (  
    _Inout_ _Interlocked_operand_ LONG volatile *Target,  
    _In_ LONG Value  
    );  

SAL 2.0-Anmerkungen für Treiber