Partage via


Annotations de pilote pour les opérandes verrouillés

Une grande famille de fonctions prend comme l’un de leurs paramètres l’adresse d’une variable accessible à l’aide d’une instruction de processeur interblocée. Il s'agit d'instructions atomiques de mise en cache en lecture et, si les opérandes sont utilisés incorrectement, des bogues très subtils en résultent.

Utilisez l'annotation suivante pour les paramètres de fonction afin de les identifier comme un opérande interverrouillé.

Annotation d’opérande interblocquée Descriptif
_Interlocked_operand_ Le paramètre de fonction annotée est l’opérande cible de l’une des fonctions interblocées. Ces opérandes doivent avoir des propriétés supplémentaires spécifiques.

Les paramètres de fonction annotés avec le _Interlocked_operand_ sont censés être partagés entre les processus. Les variables utilisées avec cette annotation doivent :

  • Être déclaré volatile.

  • Ne pas être une variable locale. L’utilisation d’une variable locale indique généralement un malentendu de l’intention de la fonction. Même si une variable locale est en quelque sorte partagée, les exigences de pagination du système rendent les variables d’adressage dans un autre processus problématique.

  • L'accès n'est possible que par une fonction d’interlocking. Sans l’utilisation explicite d’une fonction interblocée, l’opération peut accéder aux données obsolètes, peut se produire uniquement dans le cache d’un seul processeur ou être retardée dans l’atteinte du reste du système.

Les fonctions fournies par le système sont déjà annotées pour les opérandes verrouillés.

L’exemple suivant montre l’annotation de la fonction InterlockedExchange . Cette annotation spécifie que le paramètre Cible doit toujours être accessible à l’aide d’une opération interblocée.

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

Annotations SAL 2.0 pour les pilotes