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/