zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    yzoj P2344 斯卡布罗集市 题解
    yzoj P2350 逃离洞穴 题解
    yzoj P2349 取数 题解
    JXOI 2017 颜色 题解
    NOIP 2009 最优贸易 题解
    CH 4302 Interval GCD 题解
    CH4301 Can you answer on these queries III 题解
    Luogu2533[AHOI2012]信号塔
    Luogu3320[SDOI2015]寻宝游戏
    Luogu3187[HNOI2007]最小矩形覆盖
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8548332.html
Copyright © 2011-2022 走看看