我有一个关于使用gcc的原子变量的虚拟问题。 我的机器支持__sync_add_and_fetch
功能;我在线程A中使用此调用来设置my_variable (int)
。C和gcc中的原子变量的平等测试
我希望线程B读取该共享变量,以便根据一个值来测试它,例如, 20. 是否正确写出以下
if(__sync_bool_compare_and_swap(&my_variable, 20, 20)){
//..Ok! It is 20 so go ahead!
}else{
// wrong: it is not ok.
}
如果没看错的GCC当有共享变量的竞争中__sync_val_compare_and_swap
可能会失败,但我不知道它不会返回;它如何与__sync_bool_compare_and_swap
一起工作?
问题是什么也发生,当同时线程A正在使用__sync_fetch_and_add
更改值?总是保证它会在__sync_bool_compare_and_swap
同时运行时返回总和事件的值?
理想情况下,为了达到我的目的,我真的需要一个函数,它只执行一个原子READ,而不是一个Swap。有C或GCC这样的东西?
非常感谢
AFG
如果您认为此代码有任何用处,我怀疑您的代码中存在重大逻辑问题... – 2011-04-12 18:41:37