海湾合作委员会 : __sync_lock_test_and_set VS.= 具有易失变量的运算符

gcc : __sync_lock_test_and_set VS. = operator with volatile variables

本文关键字:VS 易失 运算符 变量 set test 委员会 lock sync and      更新时间:2023-10-16

2 个线程 A 和 B 共享一个volatile int i

线程 A i递增如下: __sync_fetch_and_add(&i, 1);

线程 B 将i设置为任意值 V,如下所示:i = 15;

我的问题:对于这种用法,B应该使用__sync_lock_test_and_set(&i, 15);而不是直接影响=运算符吗?

如果是,__sync_lock_release test_and_set之后是强制性的吗?

环境:gcc 4.1.2,centos 5.11 32 位,无 c++11

如果您不使用同步函数,则线程 A 和 B 之间存在i的数据争用。并且根据 __sync_lock_test_and_set__sync_lock_release 的定义,您应该在使用 sync_lock 后使用释放。

对于参考

文献