Eu estava usando vector<atomic<bool>>
em C++, o código está aqui:
#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;
}
Não sei por que, não importa qual count
seja o valor da variável, o conteúdo de saída é sempre "11111", o que significa que compare_exchange_strong()
só é bem-sucedido 5 vezes, metade do comprimento do arquivo vector<atomic<bool>>
.
Espero que a saída seja 1111111111
(dez 1s).
Alguém pode me dizer o porquê? Obrigado!!!!