【发布时间】:2014-12-05 09:28:56
【问题描述】:
第一个问题,为什么 atomic_compare_exchange_weak 操作的参数中没有应用后缀评估 (++)? a 的值在操作之前和之后是相同的。但是,当在 printf() 中使用时,正如预期的那样,该值会增加。
代码:
int main(){
atomic<int> s(0);
int a = 0;
atomic_compare_exchange_weak(&s,&a,a++);
printf("%d %d\n",s.load(),a++);
printf("%d\n",a);
}
有以下输出:
0 0
1
当我期望这个输出时:
0 1
2
其次,我想使用后缀评估来测试多线程情况下原子操作的顺序,我的方法是否存在某种悲剧性的缺陷?例如,即使增量运算符确实有效,是否会在第一个 CAS 和增量计算之间发生另一个 CAS 操作?
【问题讨论】:
标签: c++ multithreading atomic