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 }