我有一个 Windows 7 驱动程序,我想在其中同步对变量的访问。我可以使用 InterlockedExchange 吗?
我目前对 InterlockedExchange 的理解是,InterlockedExchange 是通过编译器内在函数完成的。这意味着,读取(InterlockedExchange 返回旧值)和写入在一个时钟周期内完成。仅当始终通过互锁函数访问变量时,互锁函数才是原子的。
但是在这种情况下会发生什么:
CPU1: InterlockedExchange(&Adapter->StatusVariable, 5);
CPU2: InterlockedExchange(&Adapter->StatusVariable, 3);
StatusVariable 在两个 CPU 内核上以相同的时钟周期写入。函数是否注意到变量被访问并将写入推迟到不同的时钟周期?还是未定义变量在写入后具有哪个值?变量是否也可能包含垃圾?
编辑:我在 x86 或 x64 上。