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之后,应使用release。

for ref

关于c++ - gcc:__sync_lock_test_and_setVS。 =具有易变变量的运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37526922/

10-10 21:23
查看更多