#include<iostream>
#include<thread>
#include<vector>
struct Counter {
volatile int value;
Counter() : value(0){}
void increment(){
value = value + 1000;
}
};
int main(){
int n = 10;
while(n--){
Counter counter;
std::vector<std::thread> threads;
for(int i = 0; i < 5; ++i){
threads.push_back(std::thread([&counter](){
for(int i = 0; i < 1000000; ++i){
counter.increment();
}
}));
}
for(auto& thread : threads){
thread.join();
}
std::cout << counter.value << std::endl;
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHRocmVhZD4KI2luY2x1ZGU8dmVjdG9yPgoKc3RydWN0IENvdW50ZXIgewogICAgdm9sYXRpbGUgaW50IHZhbHVlOwoKICAgIENvdW50ZXIoKSA6IHZhbHVlKDApe30KCiAgICB2b2lkIGluY3JlbWVudCgpewogICAgICAgIHZhbHVlID0gdmFsdWUgKyAxMDAwOwogICAgfQp9OwoKaW50IG1haW4oKXsKCWludCBuID0gMTA7Cgl3aGlsZShuLS0pewogICAgQ291bnRlciBjb3VudGVyOwoKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dGhyZWFkPiB0aHJlYWRzOwogICAgZm9yKGludCBpID0gMDsgaSA8IDU7ICsraSl7CiAgICAgICAgdGhyZWFkcy5wdXNoX2JhY2soc3RkOjp0aHJlYWQoWyZjb3VudGVyXSgpewogICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKXsKICAgICAgICAgICAgICAgIGNvdW50ZXIuaW5jcmVtZW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICB9CgogICAgZm9yKGF1dG8mIHRocmVhZCA6IHRocmVhZHMpewogICAgICAgIHRocmVhZC5qb2luKCk7CiAgICB9CgogICAgc3RkOjpjb3V0IDw8IGNvdW50ZXIudmFsdWUgPDwgc3RkOjplbmRsOwoJfQogICAgcmV0dXJuIDA7Cn0=