#include <mutex>
#include <thread>
#include <iostream>
std::mutex m1, m2;
void loop2()
{
for(int i = 0; i < 10; ++i) {
m2.lock();
std::cout << "Thread 2: " << i << '\n';
m1.unlock();
}
}
void loop1()
{
m2.lock();
std::thread t2(loop2);
for(int i = 0; i < 10; ++i) {
m1.lock();
std::cout << "Thread 1: " << i << '\n';
m2.unlock();
}
t2.join();
m2.unlock();
}
int main()
{
std::thread(loop1).join();
}
I2luY2x1ZGUgPG11dGV4PgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8aW9zdHJlYW0+CgpzdGQ6Om11dGV4IG0xLCBtMjsKCnZvaWQgbG9vcDIoKQp7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewogICAgICAgIG0yLmxvY2soKTsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlRocmVhZCAyOiAiIDw8IGkgPDwgJ1xuJzsKICAgICAgICBtMS51bmxvY2soKTsKICAgIH0KfQoKdm9pZCBsb29wMSgpCnsKICAgIG0yLmxvY2soKTsKICAgIHN0ZDo6dGhyZWFkIHQyKGxvb3AyKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CiAgICAgICAgbTEubG9jaygpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiVGhyZWFkIDE6ICIgPDwgaSA8PCAnXG4nOwogICAgICAgIG0yLnVubG9jaygpOwogICAgfQogICAgdDIuam9pbigpOwogICAgbTIudW5sb2NrKCk7Cgp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dGhyZWFkKGxvb3AxKS5qb2luKCk7Cn0K