fork download
  1. #include <iostream>
  2. #include <thread>
  3. #include <regex>
  4. #include <vector>
  5. #include <thread>
  6. #include<future>
  7. #include <chrono>
  8. using namespace std;
  9.  
  10.  
  11. void data_preparation_tread(shared_ptr<mutex>& mut, shared_ptr<vector<int>>& data_queue, shared_ptr<condition_variable>& data_cond)
  12. {
  13. while (true)
  14. {
  15. static int x = 0;
  16. x++;
  17. lock_guard<mutex> ld(*mut);
  18. data_queue->push_back(x);
  19. data_cond->notify_one();
  20. chrono::milliseconds ms(1000);
  21. this_thread::sleep_for(ms);
  22. if (x == 10)
  23. break;
  24. }
  25. }
  26.  
  27. void data_processing_thread(shared_ptr<mutex>& mut, shared_ptr<vector<int>>& data_queue, shared_ptr<condition_variable>& data_cond)
  28. {
  29. while (true)
  30. {
  31. std::unique_lock<mutex> lk(*mut);
  32. data_cond->wait(lk, [=]{
  33. if (data_queue->empty())
  34. {
  35. cout << endl << "Fault wake up" << endl;
  36. }
  37. return !data_queue->empty();
  38. });
  39. int number{};
  40. while (data_queue->size() > 0)
  41. {
  42. number = data_queue->back();
  43. data_queue->pop_back();
  44. cout << "Number:" << number << " " << "Buffer length:" << data_queue->size() << endl;
  45. }
  46. lk.unlock();
  47. if (number == 10)
  48. break;
  49. }
  50. }
  51.  
  52.  
  53. int main() {
  54. shared_ptr<mutex> mut = make_shared<mutex>();
  55. shared_ptr<vector<int>> data_queue = make_shared<vector<int>>();
  56. shared_ptr<condition_variable> data_cond = make_shared<condition_variable>();
  57.  
  58. std::thread processing = thread(data_processing_thread, ref(mut), ref(data_queue), ref(data_cond));
  59. std::thread preparation = thread(data_preparation_tread, ref(mut), ref(data_queue), ref(data_cond));
  60. processing.join();
  61. preparation.join();
  62. return 0;
  63. }
Time limit exceeded #stdin #stdout 5s 85696KB
stdin
Standard input is empty
stdout
Number:10   Buffer length:9
Number:9   Buffer length:8
Number:8   Buffer length:7
Number:7   Buffer length:6
Number:6   Buffer length:5
Number:5   Buffer length:4
Number:4   Buffer length:3
Number:3   Buffer length:2
Number:2   Buffer length:1
Number:1   Buffer length:0

Fault wake up