アトミック型
スレッドの競合状態から保護される組み込み型を提供します。型名の最初に atomic_ がついている型、たとえば atomic_intatomic_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_iterationsatomic_int として競合状態から保護されています。