fork download
  1. #include <iostream>
  2. #include <thread>
  3. #include <mutex>
  4. #include <condition_variable>
  5.  
  6. std::mutex mu;
  7. std::condition_variable cond;
  8. int count = 1;
  9.  
  10. void PrintOdd()
  11. {
  12. for(; count < 100;)
  13. {
  14. std::unique_lock<std::mutex> locker(mu);
  15. cond.wait(locker,[](){ return (count%2 == 1); });
  16. std::cout << "From Odd: " << count << std::endl;
  17. count++;
  18. locker.unlock();
  19. cond.notify_all();
  20. }
  21.  
  22. }
  23.  
  24. void PrintEven()
  25. {
  26. for(; count < 100;)
  27. {
  28. std::unique_lock<std::mutex> locker(mu);
  29. cond.wait(locker,[](){ return (count%2 == 0); });
  30. std::cout << "From Even: " << count << std::endl;
  31. count++;
  32. locker.unlock();
  33. cond.notify_all();
  34. }
  35. }
  36.  
  37. int main()
  38. {
  39. std::thread t1(PrintOdd);
  40. std::thread t2(PrintEven);
  41. t1.join();
  42. t2.join();
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0.01s 5512KB
stdin
Standard input is empty
stdout
From Odd:    1
From Even: 2
From Odd:    3
From Even: 4
From Odd:    5
From Even: 6
From Odd:    7
From Even: 8
From Odd:    9
From Even: 10
From Odd:    11
From Even: 12
From Odd:    13
From Even: 14
From Odd:    15
From Even: 16
From Odd:    17
From Even: 18
From Odd:    19
From Even: 20
From Odd:    21
From Even: 22
From Odd:    23
From Even: 24
From Odd:    25
From Even: 26
From Odd:    27
From Even: 28
From Odd:    29
From Even: 30
From Odd:    31
From Even: 32
From Odd:    33
From Even: 34
From Odd:    35
From Even: 36
From Odd:    37
From Even: 38
From Odd:    39
From Even: 40
From Odd:    41
From Even: 42
From Odd:    43
From Even: 44
From Odd:    45
From Even: 46
From Odd:    47
From Even: 48
From Odd:    49
From Even: 50
From Odd:    51
From Even: 52
From Odd:    53
From Even: 54
From Odd:    55
From Even: 56
From Odd:    57
From Even: 58
From Odd:    59
From Even: 60
From Odd:    61
From Even: 62
From Odd:    63
From Even: 64
From Odd:    65
From Even: 66
From Odd:    67
From Even: 68
From Odd:    69
From Even: 70
From Odd:    71
From Even: 72
From Odd:    73
From Even: 74
From Odd:    75
From Even: 76
From Odd:    77
From Even: 78
From Odd:    79
From Even: 80
From Odd:    81
From Even: 82
From Odd:    83
From Even: 84
From Odd:    85
From Even: 86
From Odd:    87
From Even: 88
From Odd:    89
From Even: 90
From Odd:    91
From Even: 92
From Odd:    93
From Even: 94
From Odd:    95
From Even: 96
From Odd:    97
From Even: 98
From Odd:    99
From Even: 100