c++ condition_variable用法

更新时间:2023-07-03 00:39:35 阅读: 评论:0

c++ condition_variable用法
    condition_variable是C++11中实现线程同步的基本工具之一。它的作用是使线程等待某个条件变量的满足,当条件变量满足时,线程会被唤醒继续执行。
    condition_variable定义在头文件<condition_variable>中,其主要包含以下两个功能:
    1. 等待条件变量满足:调用condition_variable的wait()函数可以使当前线程等待条件变量的满足,并且将线程阻塞在此处,直到被唤醒。该函数需要传入一个unique_lock对象,并在等待期间自动解锁该对象,从而允许其他线程修改共享资源。使用wait()函数需要注意以下几点:
    (1)必须要在持有该unique_lock对象的情况下调用wait()函数。
    (2)wait()函数被唤醒后需要重新加锁unique_lock对象以继续执行。
    2. 唤醒等待线程:条件变量的满足需要在某个时刻由其他线程来控制,并唤醒正在等待的线程。调用condition_variable的notify_one()函数可以唤醒至少一个正在等待的线程,如果没有等待线程则该函数不会起作用。另一个notify_all()函数可以唤醒所有正在等待的线程。
    使用condition_variable时需要注意以下几点:
    (1)条件变量必须和某个互斥锁配合使用,以确保线程安全。
    (2)必须使用unique_lock来锁定互斥锁。在使用condition_variable的wait()函数时,该函数会自动解锁unique_lock对象,然后阻塞该线程,当该线程被唤醒后会重新上锁unique_lock对象,并继续执行该线程。
    以下是一个使用condition_variable的示例代码:
    ```
#include <iostream>
#include <thread>
跑堂者#include <mutex>cha
#include <condition_variable>
石家庄北大青鸟>商务英语学习课程    using namespace std;
    mutex m;
condition_variable cv;
autsbool flag = fal;
大饱眼福的意思    void consumer()
{
    unique_lock<mutex> lk(m);
    cout << "Consumer: waiting" << endl;
    cv.wait(lk, []{ return flag; });
    cout << "Consumer: done" << endl;
}
    void producer()
{
    unique_lock<mutex> lk(m);
    cout << "Producer: working" << endl;
    flag = true;
6 1儿童节手抄报    lk.unlock();
    cv.notify_one();
}
    int main()
{
learn的近义词
    thread c(consumer);
    thread p(producer);
        c.join();
    p.join();
手机英语学习软件免费下载    return 0;
}
```
    上述代码中,线程consumer调用wait()函数进入等待状态,直到线程producer将flag设置为true并调用notify_one()函数唤醒等待线程。在唤醒后,consumer线程会重新上锁unique_lock对象,并继续执行线程。
初四英语

本文发布于:2023-07-03 00:39:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/165287.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   等待   函数   唤醒
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图