2025年c++ 条件变量signal(c++ 条件变量 future)

c++ 条件变量signal(c++ 条件变量 future)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>接上篇&#xff1a;C&#43;&#43;新特性35_条件变量的引入&#xff08;传统采用while&#xff08;1&#xff09;的轮询方式解决线程按顺序执行和共享变量问题十分低效&#xff0c;使用条件变量可以实现高效的事件模型&#xff08;类似于Qt中信号槽机制&#xff09;&#xff09;引入了条件变量&#xff0c;用于线程间数据交互或者线程间存在先后顺序的情况&#xff0c;本篇将介绍如何使用条件变量。</p> 

讯享网

条件变量在C++中有一个类,此处先不讲这个类,先讲在之后再讲C++11中是如何封装的 。

下为利用C++11中条件变量的代码:子线程先进入等待,主线程再发送信号

讯享网

其中对于中的第二个参数是前面讲到的互斥体的类型,普通、超时、递归等。
在这里插入图片描述
讯享网
整体代码的思维导图如下:
在这里插入图片描述



起一条子线程,可能在main之前或者之后调,操作系统采用动态的调用回调函数,有可能是在发送信号前也有可能是在发送信号之后。

  • 如果在发送信号之前调用子线程,就执行进行等待,
  • 如果在发送信号之后调用子线程,当时,接受信号进行打印
  • 子线程回调是在发送信号前还是在发送信号之后都不会有影响。

条件变量g_cnd一定要搭配互斥体g_mtx使用根本原因是他们在保护一种条件while (!g_isSet),条件变量g_cnd总是搭配一种条件使用,所以将因此将称为条件变量;

条件变量g_cnd要被两个线程共享使用,所以需要依赖互斥体,因此条件while (!g_isSet)、 条件变量g_cnd、 互斥体g_mtx三胞胎需要同时使用。

  1. 条件变量:用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知。
  2. 条件变量自身并不包含条件。因为它通常和 if (或者while) 一起用,所以叫条件变量
  3. 需要配合互斥体mtx一起使用
  4. 使用:

  • _Cnd_init/_Cnd_destroy
  • _Cnd_wait :
    • 进入函数前,必须首先获得mtx锁
    • 进入该函数中,线程阻塞,发生:

<ul><li>线程陷入等待&#xff0c;直至条件变量信号被触发</li><li>互斥体mtx解锁</li></ul> </li><li>线程等待条件变量信号成功&#xff0c;函数即将返回&#xff0c;发生&#xff1a; <ul><li>在函数返回之前&#xff0c;mtx再次被上锁</li></ul> </li></ul> </li><li> <p>_Cnd_signal:</p> 

  • 解除当前在条件变量上等待的一个线程。 如果没有线程被阻塞,则不执行任何操作并返回。
  • _Cnd_broadcast:
    • 解除当前等待条件变量的所有线程。 如果没有线程被阻塞,则不执行任何操作并返回。
  • 3.学习视频地址: 条件变量的使用

    请你说说条件变量?
    得分点
    线程同步、阻塞、唤醒


    小讯
    上一篇 2025-04-25 07:59
    下一篇 2025-05-13 09:35

    相关推荐

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
    如需转载请保留出处:https://51itzy.com/kjqy/148322.html