C和gcc中原子变量的相等性检验
|
我有一个关于使用gcc的原子变量的虚拟问题。
我的机器支持
__sync_add_and_fetch
功能;我在线程A中使用此调用来设置my_variable (int)
。
我希望线程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没错,则共享变量中出现竞赛时,race3可能会失败,但是我不知道返回的结果是什么。 __sync_bool_compare_and_swap
如何工作?
问题是,同时线程A使用__sync_fetch_and_add
更改值时,还会发生什么情况?是否总是保证当__sync_bool_compare_and_swap
同时运行时,它将返回该sum事件的值?
理想地说,就我的目的而言,我确实需要一个功能,该功能仅执行原子只读操作,也不执行交换操作。有C或gcc这样的东西吗?
非常感谢
美国空军
没有找到相关结果
已邀请:
2 个回复
捻盒愧杯
函数就可以完成所有这些操作,因为只有一个线程正在编写而另一个线程正在读取;无需担心数据损坏。同样,您不必担心变量是最新的,因为您有一个涉及该变量的单独竞争条件(值的更新速度快于其检查的速度)。
济畦刨