【发布时间】:2017-06-05 22:23:25
【问题描述】:
我有这种情况,我有一个状态变量; int 状态 = (2, 1, 0) 和一个无限循环:
ret = BoolCompareAndSwap(state, 1, 2)
if (ret) {
// Change something ...
state = 0;
}
这个状态设置会是原子的吗? 假设要设置一个变量,您必须:
- 从记忆中取出
- 更改值
- 设置新值
如果其他线程来比较变量,这将是原子的,因为实际值不会改变,直到它在内存中重新设置,对吗?
【问题讨论】:
-
查看这个question,之前有人问过关于原子变量的问题。状态设置的顺序将取决于线程的完成方式,即使其线程安全。
标签: c multithreading variables atomic compare-and-swap