1 #define _CRT_SECURE_NO_WARNINGS 2 #include <iostream> 3 #include <thread> 4 #include <mutex> 5 #include <condition_variable> 6 using namespace std; 7 8 //线程通信,结合mutex 9 //一个线程,多个线程处于等待,通知一个或者通知多个 10 11 mutex m;//线程相互排斥 12 condition_variable cv;//线程相互通信 13 14 void main() 15 { 16 thread **th = new thread*[10];//开辟线程的指针数组 17 for (int i = 0; i < 10; i++) 18 { 19 th[i] = new thread( [](int index) 20 { 21 /* mutex的std::lock_guard其功能是在对象构造时将mutex加锁, 22 析构时对mutex解锁,这样一个栈对象保证了在异常情形下mutex可以在lock_guard对象析构被解锁, 23 lock_guard拥有mutex的所有权。*/ 24 //用互斥量初始化lck进入等待状态 25 unique_lock<mutex> lck(m); 26 //等待接收通信 27 cv.wait_for(lck, chrono::hours(1000)); 28 cout << index << endl;//打印编号 29 }, i); 30 } 31 32 33 34 //挨个通知,解锁mutex 35 //for (int i = 0; i < 10; i++) 36 //{ 37 /*当一个lock_guard对象被创建后,它就会尝试去获得给到它的mutex的所有权。 38 当控制权不在该lock_guard对象所被创建的那个范围后,该lock_guard就会被析构, 39 从而mutex被释放。*/ 40 //lock_guard<mutex> lckg(m);//解锁向导 41 //cv.notify_one(); 42 //} 43 //通知所有,解锁mutex 44 cv.notify_all(); 45 46 for (int i = 0; i < 10; i++) 47 { 48 th[i]->join(); 49 delete th[i]; 50 } 51 delete[] th; 52 53 cin.get(); 54 }