Comparteix via


Anotaciones de controlador para operandos de interbloqueo

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 a través de 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 identificarlo como un operando interbloqueado.

Operando interbloqueado: anotación Descripción
_Operador_interbloqueado_ El parámetro de función anotada 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:

  • Debe declararse volátil.

  • No ser 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 sea problemático abordar variables en otro proceso.

  • No se debe acceder a él excepto mediante una función entrelazada. Sin el uso explícito de una función interbloqueada, la operación podría tener acceso a datos obsoletos, podría producirse solo en la memoria caché de un solo procesador o podría retrasarse al 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