#include <iostream>
#include <string>
#include <thread>
#include <mutex>
thread_local unsigned int rage = 1;
std::mutex cout_mutex;
void increase_rage(const std::string& thread_name)
{
++rage;
std::lock_guard<std::mutex> lock(cout_mutex);
std::cout << "Rage counter for " << thread_name << ": " << rage << '\n';
}
int main()
{
std::thread a(increase_rage, "a"), b(increase_rage, "b");
{
std::lock_guard<std::mutex> lock(cout_mutex);
std::cout << "Rage counter for main: " << rage << '\n';
}
a.join();
b.join();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8bXV0ZXg+CiAKdGhyZWFkX2xvY2FsIHVuc2lnbmVkIGludCByYWdlID0gMTsgCnN0ZDo6bXV0ZXggY291dF9tdXRleDsKIAp2b2lkIGluY3JlYXNlX3JhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIHRocmVhZF9uYW1lKQp7CiAgICArK3JhZ2U7CiAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhjb3V0X211dGV4KTsKICAgIHN0ZDo6Y291dCA8PCAiUmFnZSBjb3VudGVyIGZvciAiIDw8IHRocmVhZF9uYW1lIDw8ICI6ICIgPDwgcmFnZSA8PCAnXG4nOwp9CiAKaW50IG1haW4oKQp7CiAgICBzdGQ6OnRocmVhZCBhKGluY3JlYXNlX3JhZ2UsICJhIiksIGIoaW5jcmVhc2VfcmFnZSwgImIiKTsKIAogICAgewogICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGNvdXRfbXV0ZXgpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiUmFnZSBjb3VudGVyIGZvciBtYWluOiAiIDw8IHJhZ2UgPDwgJ1xuJzsKICAgIH0KIAogICAgYS5qb2luKCk7CiAgICBiLmpvaW4oKTsKIAogICAgcmV0dXJuIDA7Cn0=