首页 > 编程语言 >C++ 线程同步condition_variable的使用

C++ 线程同步condition_variable的使用

时间:2024-05-29 17:04:09浏览次数:29  
标签:lock C++ 互斥 线程 notify variable cv

一,condition_variable使用步骤

创建一个scondition_variable对象。
创建一个互斥量对象mutex。

创建两个线程:等待线程和唤醒线程。
在等待线程中,使用unique_lock锁定互斥量,并调用wait函数进入等待状态。
在唤醒线程lock_guard锁定互斥量,并调用notify_one或notify_all函数唤醒等待的线程。

二 代码

#include <iostream>
#include <thread>
#include <mutex>

using namespace std;

mutex mtx;
condition_variable cv;

void my_thread()
{
	unique_lock<mutex> lock(mtx);

	cv.wait(lock);  //会释放互斥量,然后等待通知

	cout << "thread is nofified" << endl;
}

int main()
{
	thread t = thread(my_thread);

	this_thread::sleep_for(chrono::seconds(1));

	// lock变量离开其作用域,则释放互斥量的锁。因此必须用{}包含起来。
	{
	    lock_guard<mutex> lock(mtx);
	}
	//释放互斥锁

	cv.notify_all();

	t.join();

	return 0;
}


 

标签:lock,C++,互斥,线程,notify,variable,cv
From: https://blog.csdn.net/m0_64098026/article/details/139268900

相关文章

  • C++ std::function和std::bind的六种用法总结
    一,使用funciton和bind的六种方法1,使用function接收普通函数2,使用function接收lambda函数3,使用function函数来接收函数对象4,使用bind函数绑定类中的一般函数5,使用bind函数绑定类中的多态函数6,使用function来实现回调。二,代码实现直接看代码和注释:#include<iostream>#......
  • C++语言实现身份证实名认证、身份证上的文字识别接口
    实名认证是什么意思呢?一般指的是对用户资料真实性进行的验证审核,这样有利于建立完善且可靠的互联网环境。如果交易双方使用的都是虚假信息,那么在诸多环节会存在很大的风险。另外,还有游戏平台对玩家进行实名认证,防止未成年人注册。翔云身份证实名认证接口,通过核验身份证二......
  • C++语言实现发票查验功能、医疗票据查验、财政票据识别
    封账结算是个苦活、累活,在账务干过的人都知道,就连发票都要一张一张的录,一张一张的审,结一次账、扒一层皮,就累得人仰马翻。除此之外,在临近春节的这个时期,账务部门的小伙伴们,只能眼巴巴地看着别人抢票,在财务报告初稿没有正式提交给审计师前,没人敢提前预定回家的票,甚至都不确定是......
  • Ubuntu下的onnxruntime(c++)编译 转载文章 非原创
    仓库下载gitclone--depth=1--branchv1.12.1https://github.com.cnpmjs.org/microsoft/onnxruntime.git注意:需要更换国内镜像源编译GPU./build.sh--skip_tests--use_cuda--configRelease--build_shared_lib--parallel--cuda_home/usr/local/cuda-11.3--cudnn_home/u......
  • C++中以类的成员函数作为Windows callback函数需要设置成static函数
    在看代码时,发现很多CALLBACK函数,所以仔细研究了一下C++中的CALLBACK函数首先,我们来理解一下,什么是C++中的CALLBACK函数 =>凡是由你设计,但是由Windows操作系统调用的函数,我们把它统称为CALLBACK函数,这些函数都有一定的类型,以方便配合Windows的调用动作某些WindowsAPI函数会要......
  • c++ 构造函数
     =================1.简介子类为完成基类初始化,在C++11之前,需要在初始化列表调用基类的构造函数,从而完成构造函数的传递。如果基类拥有多个构造函数,那么子类也需要实现多个与基类构造函数对应的构造函数。classBase{public: Base(intv):_value(v),_c(‘0’){} Base(cha......
  • 线程练习题
    编写一个程序,主线程中创建一个子线程,容纳后让主线程先退出并返回一个值,子线程接合主线程后输出主线程的退出值,然后子线程退出./********************************************************************* filename:pthread.c* author :Dazz* date :2024/05/29*......
  • QT C++实现表头添加组件
    QTableWidget在表头添加组件QTableWidget的表头有一个类QHeaderView是专门处理表头的类,要在表头添加一个类似QCheckBox的组件需要重写一个类并继承QHeaderView。QTableWidget中添加复选框并实现全选居中:自定义类MyHeaderView并继承QHeaderView自定义类MyTableWidget并继承QTa......
  • 协程 进程 线程的区别
    协程(Coroutine)、进程(Process)和线程(Thread)是三种并发编程的技术,它们在并发控制、资源使用和上下文切换方面有不同的特点和用途。以下是它们的主要区别:进程定义:进程是操作系统分配资源和调度的基本单位。每个进程拥有独立的地址空间、全局变量、堆和栈。资源开销:进程之间的切换......
  • Java语言,MySQL数据库;SSM 心理咨询预约管理系统19086(免费领源码)计算机毕业设计项目推荐
    目 录摘要1绪论1.1背景及意义1.2研究现状1.3ssm框架介绍1.4论文结构与章节安排2 心理咨询预约管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能......