34.条件变量与多线程(单播与多播)

Posted 喵小喵~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了34.条件变量与多线程(单播与多播)相关的知识,希望对你有一定的参考价值。

 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 }

 

以上是关于34.条件变量与多线程(单播与多播)的主要内容,如果未能解决你的问题,请参考以下文章

广播与多播

简单委托(委托)与多播委托

ZeroMQ/NanoMsg 发布/订阅与多播

多播与Hazelcast服务自动发现,如何检测多播是否可用

Apache camel 错误处理如何与多播和事务一起使用

互斥锁与多线程间共享全局变量