码迷,mamicode.com
首页 > 编程语言 > 详细

c++11の条件变量

时间:2019-03-01 18:45:06      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:并且   死锁   无法   return   names   using   sleep   namespace   条件   

一、条件变量的引入

std::condition_variable 解决了死锁并且控制的资源的访问顺序二避免不必要的等待。当互斥操作不够用而引入的。比如,线程可能需要等待某个条件为真才能继续执行,而一个忙等待循环中可能会导致所有其他线程都无法进入临界区使得条件为真时,就会发生死锁。所以,condition_variable实例被创建出现主要就是用于唤醒等待线程从而避免死锁。std::condition_variable的 notify_one()用于唤醒一个线程;notify_all() 则是通知所有线程。
二、下面是一个引用的例子

// threadTest.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <thread>
#include <mutex>
#include <string>
#include <fstream>
#include <deque>
#include <condition_variable>

using namespace std;


std::deque<int> q;
std::mutex mu;
std::condition_variable cond;

void function_1() 
{
    int count = 10;
    while (count>0)
    {
        std::unique_lock<mutex> locker(mu);
        q.push_back(count);
        locker.unlock();
        cond.notify_all();
        std::this_thread::sleep_for(chrono::seconds(1));
        count--;
    }

}

void funciton_2() 
{
    int data = 0;
    while (data != 1)
    {
        std::unique_lock<mutex> locker(mu);
        cond.wait(locker, [](){return !q.empty(); });
        data = q.back();
        q.pop_back();
        locker.unlock();
        cout << "t2 get a value form t1 " << data << endl;
    }

}


int main()
{
    thread t1(function_1);
    thread t2(funciton_2);
    t1.join();
    t2.join();


    std::getchar();
    return 0;
}

 

c++11の条件变量

标签:并且   死锁   无法   return   names   using   sleep   namespace   条件   

原文地址:https://www.cnblogs.com/xietianjiao/p/10457962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!