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 qui doit être accessible à l’aide d’une instruction de processeur verrouillée. Il s’agit d’instructions atomiques en lecture dans le cache et, si les opérandes sont utilisés de manière incorrecte, des bogues très subtils en résultent.
Utilisez l’annotation suivante pour les paramètres de fonction pour l’identifier en tant qu’opérande verrouillé.
Annotation d’opérande verrouillée | Description |
---|---|
_Interlocked_operand_ | Le paramètre de fonction annotée est l’opérande cible de l’une des fonctions verrouillées. Ces opérandes doivent avoir des propriétés supplémentaires spécifiques. |
Les paramètres de fonction annotés avec les _Interlocked_operand_ sont censés être partagés entre les processus. Les variables utilisées avec cette annotation doivent :
Être déclaré volatile.
N’est pas une variable locale. L’utilisation d’une variable locale indique généralement une incompréhension de l’intention de la fonction. Même si une variable locale est partagée d’une manière ou d’une autre, les exigences de pagination du système rendent l’adressage des variables dans un autre processus problématique.
N’est pas accessible, sauf par une fonction verrouillée. Sans l’utilisation explicite d’une fonction verrouillée, l’opération peut accéder aux données obsolètes, se produire uniquement dans le cache d’un seul processeur ou être retardée pour atteindre le 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 Target doit toujours être accessible à l’aide d’une opération verrouillée.
LONG
InterlockedExchange (
_Inout_ _Interlocked_operand_ LONG volatile *Target,
_In_ LONG Value
);