并发支持库(4)-条件变量

条件变量允许多个线程之间的交流。它可以阻塞某个线程,直到另一个线程的提醒再继续,这是通过关联一个互斥体来实现的。

本文章的代码库:

https://gitee.com/gamestorm577/CppStd

condition_variable

condition_variable是和mutex一起使用的条件变量,其提供了用于等待的接口wait、wait_for和wait_until,用于通知的接口notify_one和notify_all。代码示例:

std::mutex mut;
std::condition_variable cond;
bool ready = false;auto Func1 = [&]()
{std::unique_lock lock(mut);std::cout << "Func1 lock" << std::endl;cond.wait(lock);std::cout << "Func1 finish wait" << std::endl;
};auto Func2 = [&]()
{{std::unique_lock lock(mut);std::cout << "Func2 lock" << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));}cond.notify_one();
};std::thread t1(Func1);
std::this_thread::sleep_for(std::chrono::seconds(1));
std::thread t2(Func2);
t1.join();
t2.join();

在这段代码中,t1线程先执行并占有了互斥mut,然后t1线程调用wait,t1线程进入等待的阻塞状态并解锁mut。然后t2线程开始执行,占有互斥mut,并在解锁mut后调用接口notify_one唤醒一个等待,t1线程被唤醒,继续执行接下来的代码。最后的输出结果为:

Func1 lock
Func2 lock
Func1 finish wait

condition_variable_any

condition_variable_any是condition_variable的泛化,可以配合更多其他类型的锁完成条件变量的功能。

notify_all_at_thread_exit

在该线程完全结束时再调用notify_all。适用于需要将局部对象析构完成再调用notify_all的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Nginx进行负载均衡

什么是负载均衡 Nginx是一个高性能的开源反向代理服务器&#xff0c;也可以用作负载均衡器。通过Nginx的负载均衡功能&#xff0c;可以将流量分发到多台后端服务器上&#xff0c;实现负载均衡&#xff0c;提高系统的性能、可用性和稳定性。 如下图所示&#xff1a; Nginx负…

HDOJ 2036

改革春风吹满地 Problem Description “ 改革春风吹满地, 不会AC没关系; 实在不行回老家&#xff0c; 还有一亩三分地。 谢谢!&#xff08;乐队奏乐&#xff09;” 话说部分学生心态极好&#xff0c;每天就知道游戏&#xff0c;这次考试如此简单的题目&#xff0c;也是云里雾…

如何注册Devin-首个全自主AI软件工程师

最近devin大火&#xff0c;具体的就不说了&#xff0c;大家应该都知道&#xff0c;写代码非常nb&#xff0c;这里说一下devin的注册方式&#xff0c;目前devin的内测已经开启。 官网https://www.cognition-labs.com/blog注册网址Your reliable AI software engineerhttps://pr…

一文扫荡,12个可视化图表js库,收藏备用。

一、什么是可视化图表 可视化图表是通过图形化的方式将数据可视化展示出来的一种方式。它能够将复杂的数据以直观、易懂的形式呈现给用户&#xff0c;帮助用户更好地理解和分析数据。 可视化图表可以包括各种类型的图表&#xff0c;如线形图、柱状图、饼图、散点图、雷达图等。…

查看docker安装MySQL版本

要查看Docker中安装的MySQL版本&#xff0c;您可以按照以下步骤操作&#xff1a; 首先确保您有一个正在运行的MySQL Docker容器。如果尚未启动MySQL容器&#xff0c;请使用类似下面的命令启动它&#xff08;假设已经从Docker Hub拉取了镜像&#xff09;&#xff1a; docker run…

L2-034: 口罩发放(Python)

为了抗击来势汹汹的 COVID19 新型冠状病毒&#xff0c;全国各地均启动了各项措施控制疫情发展&#xff0c;其中一个重要的环节是口罩的发放。 某市出于给市民发放口罩的需要&#xff0c;推出了一款小程序让市民填写信息&#xff0c;方便工作的开展。小程序收集了各种信息&…

centos命令history设置记录10000行

今天在操作服务器的时候&#xff0c;用history查看操作记录的时候&#xff0c;发现只能查看10条&#xff0c;这样不行啊&#xff0c;我想查看所有人对服务器操作的命令。 [rootbogon ~]# history解决办法&#xff1a; #1、找到/etc/profile文件中的histsize 把10改成10000 […

【django framework】ModelSerializer+GenericAPIView,如何在提交前修改某些字段值

【django framework】ModelSerializerGenericAPIView&#xff0c;如何在提交前修改某些字段值 我们经常会遇到下面这种情况&#xff1a; 序列化器用的是ModelSerializer&#xff0c;写视图的时候继承的是generics.CreateAPIView。现在我想在正式提交到数据库(perform_create)之…

Windows kafka 简单集群搭建

Windows kafka 简单集群搭建 文章目录 Windows kafka 简单集群搭建1.环境说明2.Zookeeper集群搭建2.1 ZooKeeper下载2.2 ZooKeeper安装2.2.1 解压zookeeper-3.4.8.tar.gz2.2.2 进入conf目录下&#xff0c;复制zoo_sample.cfg为zoo.cfg2.2.3 修改zoo.cfg文件2.2.4 生成myid文件2…

加速 PyTorch 模型预测常见方法梳理

目录 1. 使用 GPU 加速 2. 批量推理 3. 使用半精度浮点数 (FP16) 4. 禁用梯度计算 5. 模型简化与量化 6. 使用 TorchScript 7. 模型并行和数据并行 结论 在使用 PyTorch 进行模型预测时&#xff0c;可以通过多种方法来加快推理速度。以下是一些加速模型预测的常用方法&…

24GB内存就能跑7B参数大模型?全新训练策略GaLore助你突破内存瓶颈

训练大型语言模型&#xff0c;内存总是个大问题。 权重啊、优化器状态啊&#xff0c;都得吃内存&#xff0c;而且吃得还不少。 为了省内存&#xff0c;有人就想出了一些招儿&#xff0c;比如低秩适应&#xff08;LoRA&#xff09;&#xff0c;就是给预训练权重添点儿可训练的…

基于YOLOv8深度学习的木薯病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

将内容写入文件并下载文件

这里写自定义目录标题 import saveAs from file-saver; // 获取时间 年月日时分秒 const getTimeInfo () > {return new Date().toLocaleString().replace(/\//g, ).replace(/:/g, ).replace(/ /g, ) };const getRandom () > {return (Math.random() * 10).toFixed(0);…

基于C++的一种字符串切分方法及示例代码

一、概述 在 Java 和 python 中&#xff0c;都有实现字符串切分的方法&#xff0c; 如split() &#xff0c;使用起来较为方便&#xff0c;但是在标准的 C 中&#xff0c;却没有内置的 split() 方法。 我们可以使用标准库中的一些函数和方法来实现字符串的切分&#xff0c;这里…

Android 实现 子线程 主线程 切换

Android 子线程切换到主线程 在 Android 开发中&#xff0c;我们经常需要在子线程中执行一些耗时操作&#xff0c;例如网络请求或者数据库操作。然而&#xff0c;由于 Android 的主线程&#xff08;也称为 UI 线程&#xff09;负责处理用户交互和更新界面&#xff0c;所以我们不…

【Java系列】OOM 时,JVM 堆栈信息保存和分析

一、前言 在日常开发中&#xff0c;即使代码写得再谨慎&#xff0c;免不了还是会发生各种意外的事件&#xff0c;比如服务器内存突然飙高&#xff0c;又或者发生内存溢出(OOM)。当发生这种情况时&#xff0c;我们怎么去排查&#xff0c;怎么去分析原因呢&#xff1f; 一般遇到…

前端开发小技巧【Vue篇】 - 样式穿透 + 绑定变量

前言 样式穿透 Vue都是通过深度选择器来样式穿透的。当我们在写项目的时候&#xff0c;经常会导入第三方库&#xff0c;有些特殊的情况&#xff0c;就是在导入第三方库后&#xff0c;呈现的样式并不是我们想要的样式&#xff0c;所以我们需要对第三方的样式进行修改&#xff1…

Java毕业设计 基于SSM jsp房屋租赁系统 房屋出租系统

Java毕业设计 基于SSM jsp房屋租赁系统 房屋出租系统 SSM jsp 房屋租赁系统 房屋出租系统 功能介绍 用户&#xff1a;首页 图片轮播 搜索 登录注册 新闻公告 新闻公告详情 装修广告 热门房源 房源详情 合租 整租 商业办公 普通民宅 酒店式公寓 全部房源 留言交流 发布帖子 模…

Linux下platform设备信息代码框架实现

一. 简介 前面一篇文章简单学习了Linux内核中 platform设备代码。文章地址如下&#xff1a; Linux内核中platform设备简介-CSDN博客 本文来学习如何编写 platform设备代码框架&#xff0c;为了后面学习 Linux下platform驱动开发。 二. Linux下platform设备信息代码框架实现…

汽车大灯罩汽车尾灯罩破裂裂纹破损破洞掉角崩角等问题能修复吗?怎么修复?

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题是一定可以修复的。 汽车灯罩的修复方法取决于灯罩的破损程度和材质。以下是一些常见的汽车灯罩修复方法&#xff1a; 肥皂水清洗&#xff1a;如果灯罩只是轻微模糊或发黄&#xff0c;可以使用肥皂水进行清洗。将肥皂水涂抹在…