Anotaciones de controlador para operandos interbloqueados

Una familia grande de funciones toma como uno de sus parámetros la dirección de una variable a la que se debe tener acceso mediante una instrucción de procesador interbloqueada. Se trata de instrucciones atómicas de lectura en caché y, si los operandos se usan incorrectamente, se producen errores muy sutiles.

Use la siguiente anotación para los parámetros de función para identificarla como un operando interbloqueado.

Anotación de operando interbloqueado Descripción
_Interlocked_operand_ El parámetro de función anotado es el operando de destino de una de las funciones interbloqueadas. Esos operandos deben tener propiedades adicionales específicas.

Se espera que los parámetros de función anotados con el _Interlocked_operand_ se compartan entre procesos. Las variables usadas con esta anotación deben:

  • Se declara volátil.

  • No es una variable local. El uso de una variable local suele indicar un malentendido de la intención de la función. Incluso si una variable local se comparte de alguna manera, los requisitos de paginación del sistema hacen que las variables de direccionamiento en otro proceso sean problemáticas.

  • No se tiene acceso a él excepto por una función interbloqueada. Sin el uso explícito de una función interbloqueada, la operación puede tener acceso a datos obsoletos, puede producirse solo en la memoria caché de un único procesador o puede retrasarse en llegar al resto del sistema.

Las funciones proporcionadas por el sistema ya están anotadas para operandos interbloqueados.

En el ejemplo siguiente se muestra la anotación de la función InterlockedExchange . Esta anotación especifica que siempre se debe tener acceso al parámetro Target mediante una operación interbloqueada.

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

Anotaciones de SAL 2.0 para controladores