1 #include <iostream> 2 #include <thread> 3 #include <mutex> 4 #include <condition_variable> 5 #include <array> 6 #include <vector> 7 using namespace std; 8 9 //通过mutex 等待事件响应 10 condition_variable isfull, isempty;//处理两种情况 11 mutex m; 12 bool flag = true;//标识,消费完了就退出 13 vector<int> myint;//开辟十个元素 14 15 void put(int num) 16 { 17 for (int i = 0; i < num; i++) 18 { 19 unique_lock<mutex> lk(m);//锁定 20 while (myint.size() >= 10) 21 { 22 //一直等待有空位才生产 23 isempty.wait(lk); 24 } 25 26 myint.push_back(i); 27 cout << "生产了" << i << endl; 28 //激活isfull 29 isfull.notify_all(); 30 31 this_thread::sleep_for(chrono::milliseconds(500)); 32 } 33 flag = false; 34 } 35 36 void take() 37 { 38 while (flag) 39 { 40 unique_lock<mutex> lk(m);//锁定 41 while (myint.size() == 0) 42 { 43 //一直等待有生产后才执行,(等待到激活后才可以执行) 44 isfull.wait(lk); 45 } 46 47 if (flag) 48 { 49 cout << "消费了" << myint[myint.size() - 1] << endl; 50 myint.pop_back();//消除 51 //激活isempty 52 isempty.notify_all(); 53 } 54 } 55 } 56 57 void main() 58 { 59 thread t1(take); 60 thread t2(take); 61 thread t3(take); 62 thread t4(put,100); 63 cin.get(); 64 }