某处使用InterlockedCompareExchange原子函数,某处直接访问变量,会冲突吗?

时间:2022-04-01 10:48:19
代码中,有一个地方是要不停的访问一个变量,而另一处使用InterlockedCompareExchange 改变变量的值。
请问大大们:当InterlockedCompareExchange(X) 正在改变变量的值时,a = X 这样普通访问变量的值会受影响吗?

2 个解决方案

#1


引用 楼主 vatajoan 的回复:
代码中,有一个地方是要不停的访问一个变量,而另一处使用InterlockedCompareExchange 改变变量的值。
请问大大们:当InterlockedCompareExchange(X) 正在改变变量的值时,a = X 这样普通访问变量的值会受影响吗?


不会,InterlockedCompareExchange 这个就是原子操作

#2


没有影响,Windows核心编程有说

没有任何互锁函数仅仅负责对值进行读取操作(而不改变这个值),因为这样的函数根本是不需要的。如果线程只是试图读取值的内容,而这个值始终都由互锁函数来修改,那么被读取的值总是一个很好的值。虽然你不知道你读取的是原始值还是更新值,但是你知道它是这两个值中的一个。

#1


引用 楼主 vatajoan 的回复:
代码中,有一个地方是要不停的访问一个变量,而另一处使用InterlockedCompareExchange 改变变量的值。
请问大大们:当InterlockedCompareExchange(X) 正在改变变量的值时,a = X 这样普通访问变量的值会受影响吗?


不会,InterlockedCompareExchange 这个就是原子操作

#2


没有影响,Windows核心编程有说

没有任何互锁函数仅仅负责对值进行读取操作(而不改变这个值),因为这样的函数根本是不需要的。如果线程只是试图读取值的内容,而这个值始终都由互锁函数来修改,那么被读取的值总是一个很好的值。虽然你不知道你读取的是原始值还是更新值,但是你知道它是这两个值中的一个。