fork download
  1. #include <thread>
  2. #include <condition_variable>
  3. #include <memory>
  4. #include <iostream>
  5. #include <list>
  6. #include <atomic>
  7. std::condition_variable cv;
  8. std::mutex m;
  9. std::thread t;
  10. std::atomic<bool> shouldExit;
  11. std::list<int> jobs;
  12.  
  13. void thread_func()
  14. {
  15. while (!shouldExit)
  16. {
  17. int j ;
  18. {
  19. std::unique_lock<std::mutex> lock(m);
  20. while (jobs.empty() && !shouldExit) {
  21. cv.wait(lock);
  22. }
  23. // Do some stuff
  24. if (jobs.empty()) {
  25. continue;
  26. }
  27. // Get a job and do something with it
  28. j = std::move(jobs.front());
  29. jobs.pop_front();
  30. }
  31. std::cout << "Do something with job " << j << std::endl;
  32. std::this_thread::sleep_for(std::chrono::milliseconds(1));
  33. }
  34. }
  35.  
  36. int main()
  37. {
  38. shouldExit.store(false);
  39. t = std::thread(thread_func);
  40.  
  41. for (int i = 1; i < 100; ++i) {
  42. std::cout << "Push to job " << i << std::endl;
  43. {
  44. std::lock_guard<std::mutex> lock(m);
  45. jobs.push_back(i);
  46. cv.notify_one();
  47. }
  48. std::this_thread::sleep_for(std::chrono::milliseconds(1));
  49. }
  50.  
  51. // To wait for thread exit
  52. shouldExit.store(true);
  53. cv.notify_one();
  54. t.join();
  55. return 0;
  56. }
Success #stdin #stdout 0s 11656KB
stdin
Standard input is empty
stdout
Push to job 1
Do something with job 1
Push to job 2
Do something with job 2
Push to job 3
Do something with job 3
Push to job 4
Do something with job 4
Push to job 5
Do something with job 5
Push to job 6
Do something with job 6
Push to job 7
Do something with job 7
Push to job 8
Do something with job 8
Push to job 9
Do something with job 9
Push to job 10
Do something with job 10
Push to job 11
Do something with job 11
Push to job 12
Do something with job 12
Push to job 13
Do something with job 13
Push to job 14
Do something with job 14
Push to job 15
Do something with job 15
Push to job 16
Do something with job 16
Push to job 17
Do something with job 17
Push to job 18
Do something with job 18
Push to job 19
Do something with job 19
Push to job 20
Do something with job 20
Push to job 21
Do something with job 21
Push to job 22
Do something with job 22
Push to job 23
Do something with job 23
Push to job 24
Do something with job 24
Push to job 25
Do something with job 25
Push to job 26
Do something with job 26
Push to job 27
Do something with job 27
Push to job 28
Do something with job 28
Push to job 29
Do something with job 29
Push to job 30
Do something with job 30
Push to job 31
Do something with job 31
Push to job 32
Do something with job 32
Push to job 33
Do something with job 33
Push to job 34
Do something with job 34
Push to job 35
Do something with job 35
Push to job 36
Do something with job 36
Push to job 37
Do something with job 37
Push to job 38
Do something with job 38
Push to job 39
Do something with job 39
Push to job 40
Do something with job 40
Push to job 41
Do something with job 41
Push to job 42
Do something with job 42
Push to job 43
Do something with job 43
Push to job 44
Do something with job 44
Push to job 45
Do something with job 45
Push to job 46
Do something with job 46
Push to job 47
Do something with job 47
Push to job 48
Do something with job 48
Push to job 49
Do something with job 49
Push to job 50
Do something with job 50
Push to job 51
Do something with job 51
Push to job 52
Do something with job 52
Push to job 53
Do something with job 53
Push to job 54
Do something with job 54
Push to job 55
Do something with job 55
Push to job 56
Do something with job 56
Push to job 57
Do something with job 57
Push to job 58
Do something with job 58
Push to job 59
Do something with job 59
Push to job 60
Do something with job 60
Push to job 61
Do something with job 61
Push to job 62
Do something with job 62
Push to job 63
Do something with job 63
Push to job 64
Do something with job 64
Push to job 65
Do something with job 65
Push to job 66
Do something with job 66
Push to job 67
Do something with job 67
Push to job 68
Do something with job 68
Push to job 69
Do something with job 69
Push to job 70
Do something with job 70
Push to job 71
Do something with job 71
Push to job 72
Do something with job 72
Push to job 73
Do something with job 73
Push to job 74
Do something with job 74
Push to job 75
Do something with job 75
Push to job 76
Do something with job 76
Push to job 77
Do something with job 77
Push to job 78
Do something with job 78
Push to job 79
Do something with job 79
Push to job 80
Do something with job 80
Push to job 81
Do something with job 81
Push to job 82
Do something with job 82
Push to job 83
Do something with job 83
Push to job 84
Do something with job 84
Push to job 85
Do something with job 85
Push to job 86
Do something with job 86
Push to job 87
Do something with job 87
Push to job 88
Do something with job 88
Push to job 89
Do something with job 89
Push to job 90
Do something with job 90
Push to job 91
Do something with job 91
Push to job 92
Do something with job 92
Push to job 93
Do something with job 93
Push to job 94
Do something with job 94
Push to job 95
Do something with job 95
Push to job 96
Do something with job 96
Push to job 97
Do something with job 97
Push to job 98
Do something with job 98
Push to job 99
Do something with job 99