联锁操作数的驱动程序注释

一大系列函数采用应使用互锁处理器指令访问的变量的地址作为其参数之一。 这些是缓存读取原子指令,如果操作数使用不当,则会产生非常细微的 bug。

对函数参数使用以下注释,将其标识为互锁操作数。

互锁操作数注释 说明
_Interlocked_operand_ 带批注的函数参数是其中一个互锁函数的目标操作数。 这些操作数必须具有特定的附加属性。

使用_Interlocked_operand_批注的函数参数应在进程之间共享。 与此批注一起使用的变量必须:

  • 声明为 volatile。

  • 不是局部变量。 使用局部变量通常表示对函数意图的误解。 即使局部变量以某种方式共享,系统分页要求也会使另一个进程中的变量寻址出现问题。

  • 除非由互锁函数访问,否则无法访问。 如果不显式使用互锁函数,该操作可能会访问过时的数据,可能只发生在单个处理器的缓存中,或者可能会延迟到达系统的其余部分。

系统提供的函数已针对互锁操作数进行批注。

以下示例显示了 InterlockedExchange 函数的注释。 此批注指定必须始终使用互锁操作访问 Target 参数。

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

适用于驱动程序的 SAL 2.0 批注