• 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 }
  • 相关阅读:
    HDU 4705 Y
    POJ 3614 Sunscreen
    Aizu 2170 Marked Ancestor
    POJ 3616 Milking Time
    POJ 2385 Apple Catching
    POJ 2229 Sunsets
    HDU 4678 Mine
    树的重量
    579Div3
    迷途之家2019联赛
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8548332.html
Copyright © 2020-2023  润新知