fork(1) download
  1. #include <atomic>
  2. #include <chrono>
  3. #include <condition_variable>
  4. #include <iostream>
  5. #include <mutex>
  6. #include <string>
  7. #include <thread>
  8.  
  9. std::mutex mu;
  10. std::condition_variable cv;
  11. bool finished = false;
  12.  
  13. void threadFunc()
  14. {
  15. for (int i = 0; i < 5; ++i)
  16. {
  17. std::this_thread::sleep_for(std::chrono::milliseconds(1));
  18. std::unique_lock<std::mutex> lock(mu);
  19. std:: cout << "Thread: " << (0 - i) << "\n";
  20. }
  21.  
  22. std::unique_lock<std::mutex> lock(mu);
  23. finished = true;
  24. cv.notify_one();
  25. }
  26.  
  27. int main()
  28. {
  29. {
  30. std::thread t1(threadFunc);
  31. t1.detach(); // Call `detach` to prevent blocking this thread
  32.  
  33. } // Need to call `join` or `detach` before `thread` goes out of scope
  34.  
  35. for (int i = 0; i < 5; ++i)
  36. {
  37. std::unique_lock<std::mutex> lock(mu);
  38. std::cout << "Main: " << i << "\n";
  39. }
  40.  
  41. std::cout << "End of Main\n";
  42.  
  43. std::unique_lock<std::mutex> lock(mu);
  44. cv.wait(lock, [&finished]() { return finished; });
  45.  
  46. return 0;
  47. }
Success #stdin #stdout 0s 11656KB
stdin
Standard input is empty
stdout
Main:  0
Main:  1
Main:  2
Main:  3
Main:  4
End of Main
Thread:  0
Thread:  -1
Thread:  -2
Thread:  -3
Thread:  -4