アトミック型
スレッドの競合状態から保護される組み込み型を提供します。型名の最初に atomic_ がついている型、たとえば atomic_int や atomic_uint などがそうです。
// atomic.cpp
#include <algorithm>
#include <atomic>
#include <iostream>
#include <thread>
#include <vector>
using namespace std;
atomic_int total_iterations;
vector<int> vectors;
void finder(int element) {
auto iterations = 0;
find_if(begin(vectors), end(vectors), [=, &iterations](int I) -> bool {
iterations++;
return I == element;
});
total_iterations += iterations;
cout << "Thread #" << this_thread::get_id() << ": ";
cout << "element " << element << " ";
cout << "found after " << iterations << " iterations" << endl;
}
int main(int, char *[]) {
for(int i = 0; i < 1000; i++) vectors.push_back(i);
random_shuffle(begin(vectors), end(vectors));
thread t(finder, 0);
finder(500);
t.join();
cout << total_iterations << " total iterations" << endl;
}
意味合いとしてのサンプルです。total_iterations が atomic_int として競合状態から保護されています。