#include <iostream>
#include <thread>
#include <vector>
int main() {
int shared_counter = 0;
std::vector<std::thread> threads;
for (int i = 0; i < 4; ++i) {
threads.emplace_back([&](int id) {
for (int j = 0; j < 1000; ++j) {
++shared_counter; // Race here: load, increment, store not atomic
}
std::cout << "Thread " << id << " finished.\n";
}, i);
}
for (auto& t : threads) t.join();
std::cout << "Final counter: " << shared_counter << " (expect <4000 due to races)\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8dmVjdG9yPgoKaW50IG1haW4oKSB7CiAgICBpbnQgc2hhcmVkX2NvdW50ZXIgPSAwOwoKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dGhyZWFkPiB0aHJlYWRzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICB0aHJlYWRzLmVtcGxhY2VfYmFjayhbJl0oaW50IGlkKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTAwMDsgKytqKSB7CiAgICAgICAgICAgICAgICArK3NoYXJlZF9jb3VudGVyOyAgLy8gUmFjZSBoZXJlOiBsb2FkLCBpbmNyZW1lbnQsIHN0b3JlIG5vdCBhdG9taWMKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIlRocmVhZCAiIDw8IGlkIDw8ICIgZmluaXNoZWQuXG4iOwogICAgICAgIH0sIGkpOwogICAgfQoKICAgIGZvciAoYXV0byYgdCA6IHRocmVhZHMpIHQuam9pbigpOwogICAgc3RkOjpjb3V0IDw8ICJGaW5hbCBjb3VudGVyOiAiIDw8IHNoYXJlZF9jb3VudGVyIDw8ICIgKGV4cGVjdCA8NDAwMCBkdWUgdG8gcmFjZXMpXG4iOwogICAgcmV0dXJuIDA7Cn0=