#include <atomic>
#include <chrono>
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <string>
#include <thread>
std::mutex mu;
std::condition_variable cv;
bool finished = false;
void threadFunc()
{
for (int i = 0; i < 5; ++i)
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));
std::unique_lock<std::mutex> lock(mu);
std:: cout << "Thread: " << (0 - i) << "\n";
}
std::unique_lock<std::mutex> lock(mu);
finished = true;
cv.notify_one();
}
int main()
{
{
std::thread t1(threadFunc);
t1.detach(); // Call `detach` to prevent blocking this thread
} // Need to call `join` or `detach` before `thread` goes out of scope
for (int i = 0; i < 5; ++i)
{
std::unique_lock<std::mutex> lock(mu);
std::cout << "Main: " << i << "\n";
}
std::cout << "End of Main\n";
std::unique_lock<std::mutex> lock(mu);
cv.wait(lock, [&finished]() { return finished; });
return 0;
}
I2luY2x1ZGUgPGF0b21pYz4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bXV0ZXg+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx0aHJlYWQ+CgpzdGQ6Om11dGV4IG11OwpzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBjdjsKYm9vbCBmaW5pc2hlZCA9IGZhbHNlOwoKdm9pZCB0aHJlYWRGdW5jKCkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyArK2kpCiAgICB7CiAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMSkpOwogICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtdSk7CiAgICAgICAgc3RkOjogY291dCA8PCAiVGhyZWFkOiAgIiA8PCAoMCAtIGkpIDw8ICJcbiI7CiAgICB9CiAgICAKICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtdSk7CiAgICBmaW5pc2hlZCA9IHRydWU7CiAgICBjdi5ub3RpZnlfb25lKCk7Cn0KCmludCBtYWluKCkKewoJewogICAgCXN0ZDo6dGhyZWFkIHQxKHRocmVhZEZ1bmMpOwogICAgCXQxLmRldGFjaCgpOyAvLyBDYWxsIGBkZXRhY2hgIHRvIHByZXZlbnQgYmxvY2tpbmcgdGhpcyB0aHJlYWQKICAgIAkKCX0gLy8gTmVlZCB0byBjYWxsIGBqb2luYCBvciBgZGV0YWNoYCBiZWZvcmUgYHRocmVhZGAgZ29lcyBvdXQgb2Ygc2NvcGUKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7ICsraSkKICAgIHsKICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobXUpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiTWFpbjogICIgPDwgaSA8PCAiXG4iOwogICAgfQoKICAgIHN0ZDo6Y291dCA8PCAiRW5kIG9mIE1haW5cbiI7CiAgICAKICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtdSk7CiAgICBjdi53YWl0KGxvY2ssIFsmZmluaXNoZWRdKCkgeyByZXR1cm4gZmluaXNoZWQ7IH0pOwogICAgCiAgICByZXR1cm4gMDsKfQ==