[英]gcc : __sync_lock_test_and_set VS. = operator with volatile variables
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
强制执行__sync_lock_release吗?
环境:gcc 4.1.2,centos 5.11 32位,无c ++ 11
如果你不使用同步函数,那么在线程A和B之间有i
数据争用。根据__sync_lock_test_and_set
和__sync_lock_release
的定义,你应该在使用sync_lock之后使用release。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.