当前位置: 首页 > news >正文

遵义市乡村街道建设投诉网站华为开发者模式怎么关闭

遵义市乡村街道建设投诉网站,华为开发者模式怎么关闭,网站程序源码下载,外贸网站建设要注意什么一. std::condition_variable是什么? std::condition_variable 是 C 标准库提供的一个线程同步的工具,用于实现线程间的条件变量等待和通知机制。 条件变量的发生通常与某个共享变量的状态改变相关。 在多线程编程中,条件变量通常和互斥锁…

一. std::condition_variable是什么?

std::condition_variable 是 C++ 标准库提供的一个线程同步的工具用于实现线程间的条件变量等待和通知机制。  条件变量的发生通常与某个共享变量的状态改变相关。  在多线程编程中,条件变量通常和互斥锁(std::mutex)一起使用,以避免死锁等问题。

二.用法

其常见用法如下:

1.定义std::condition_variable对象

std::condition_variable cv;

2.定义一个互斥锁对象

std::mutex m;

3.定义一个bool类型变量作为条件,通常与互斥锁一起使用

bool condition = false;

4.等待条件变量的通知

std::unique_lock<std::mutex> lk(m);
while (!condition) {cv.wait(lk); // 释放锁并等待通知
}
// 唤醒后继续执行

在等待时,std::condition_variable::wait()函数会自动释放互斥锁并将线程挂起,等待其他线程通过std::condition_variable::notify_one()std::condition_variable::notify_all()函数发出通知后唤醒线程。

唤醒后,std::unique_lock会重新锁定互斥锁,线程继续执行。

5.发送条件变量的通知

std::unique_lock<std::mutex> lk(m);
condition = true;
cv.notify_one(); // 发送通知

在发送通知时,必须先获取互斥锁,并修改条件变量的状态后才能发送通知。

需要注意的是: 

std::condition_variable一般需要和std::unique_lock一起使用,以避免竞态条件的出现。      

此外,线程在等待条件变量时,可能会出现虚假唤醒的情况,因此应该使用while循环检查条件变量的状态,而不是if语句。

三.示例

std::condition_variable的用法通常是与 std::unique_lock , std::mutex 一起使用。

可以通过以下步骤来使用 std::condition_variable :

  1. 创建std::mutex对象来保护共享资源。
  2. 创建std::condition_variable对象。
  3. 在需要等待共享资源的线程中,使用std::unique_lock, std::mutex 锁住共享资源,并使用std::condition_variable的wait()函数来阻塞线程等待通知。
  4. 在修改共享资源的线程中,修改共享资源,并使用std::condition_variable的notify_one()或notify_all()函数来通知等待的线程。
  5. 等待的线程被唤醒后,使用std::unique_lock, std::mutex 锁住共享资源,并检查共享资源是否已经被修改。

下面是一个使用std::condition_variable的示例:

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>std::mutex m;
std::condition_variable cv;
bool ready = false;void worker_thread() {// 等待主线程的信号std::unique_lock<std::mutex> lock(m);while(!ready) {cv.wait(lock);}// 做一些工作std::cout << "Worker thread is working" << std::endl;
}int main() {// 创建工作线程std::thread worker(worker_thread);// 做一些工作std::cout << "Main thread is doing something" << std::endl;// 发送信号给工作线程{std::lock_guard<std::mutex> lock(m);ready = true;}cv.notify_one();// 等待工作线程完成worker.join();return 0;
}

运行后:

 

在这个例子中,主线程和工作线程共享了一个bool型变量ready,用来表示工作线程是否可以开始工作。主线程先打印一条消息,然后发送信号给工作线程。工作线程在启动后使用std::unique_lock, std::mutex 锁住共享资源ready,并在while循环中等待信号。一旦收到信号,工作线程就会解锁并开始工作。主线程等待工作线程完成后退出。

http://www.yayakq.cn/news/43174/

相关文章:

  • 做游戏视频去哪个网站好wordpress文档结构
  • 站长工具怎样在赶集微网站做微招聘信息
  • 国外对于网站开发星巴克网站建设
  • 山东省建设工程领域挂证存颖网站手机报价大全2021中关村
  • 企业网站建设很有必要PHP网站开发项目式教程
  • 财务部官方网站经济建设司衡阳网站页面设计公司
  • 沈阳鹊起网站建设小程序制作免费吗
  • 要如何做才能拥有自己的网站呢运用.net做网站
  • 中国建设银行注册网站用户名怎么填精品网站建设费用 干净磐石网络
  • 一定得做网站认证天河岗顶棠下上社网站建设
  • 勾线外包网站利用代码如何做网站
  • 泰州做网站多少钱东营建设网站公司
  • 设置网站404页面网站备案到公司
  • 市场营销网站建设湖南做网站 安全还踏实磐石网络
  • 电子商务网站开发进什么科目电商代运营公司排名
  • 外贸展示型网站建设公司在哪里购买虚拟空间建设网站
  • 云南能投基础设施投资开发建设有限公司网站网站权重转移做排名
  • 珠宝 网站模板上海有名网站建站开发公司
  • 网站开发模块wordpress中级教程
  • 小红书网站开发费用课程平台网站建设报价
  • 什么做电子书下载网站好什么是网络营销4c理论
  • 网站关键词工具有哪些学生怎样做网站
  • 门户网站建设和检务公开整改昆明企业网站模板建站
  • 烟台城乡建设学校官方网站google play下载安装
  • 网站建设怎么弄轮换图片电子商务包括哪些
  • 中山做网站沈阳seo网站推广
  • 商务网站建设步骤有几个php与python做网站
  • 内江市网站建设培训国际贸易网站建设 中企动力湖北
  • 网站开发 精品课程青岛做网站企业排名
  • 手机个人简历模板下载网站模板360信息流广告平台