vector<atomic<bool>>
,代码在这里:
#include <iostream>
#include <thread>
#include <atomic>
#include <vector>
using namespace std;
int main() {
int n = 10;
int count = 20;
vector<atomic<bool>> flags(n);
vector<thread> jobs;
for (int i = 0; i < count; i++) {
jobs.emplace_back([&](){
bool old_val = false;
for (int i = 0; i < n; i++) {
if (flags[i].compare_exchange_strong(old_val, true)) {
cout<<1;
break;
}
}
});
}
for (int i = 0; i < count; i++) {
jobs[i].join();
}
return 0;
}
不知道为什么,不管变量count
的值是多少,输出内容始终是“11111”,也就是说
compare_exchange_strong()
只成功了5次,是
vector<atomic<bool>>
长度的一半.我预计输出将是
1111111111
(十个 1)。谁能告诉我为什么?谢谢!!!!
flags[i]
在第一次迭代中为
true
,则
old_flags
在第二次迭代中将为
true
。这种翻转意味着您只修改
flags
中的所有其他元素。将声明
bool old_val = false;
移至循环内。