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

广东平台网站建设找哪家线上app怎么做

广东平台网站建设找哪家,线上app怎么做,厦门建设工程信息网官网,东莞最新消息 今天一. 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/396954/

相关文章:

  • 义乌好品质自适应网站建设官方网站建设方案
  • 建设网站和app人工智能公众号
  • 河北做网站衡水哪家制作网站好
  • 饮料公司网站模板网站开发好学不
  • 潍坊微信网站响应式网站建设推广
  • 加工企业网站这么做做网站找酷万
  • 苏州做儿童场馆门票包票的网站网站刷流量有用吗
  • 怎么在在慧聪网上做网站推广网站开发工程师需要具备的综合素质
  • pytson做网站安全吗计算机应用网站建设与维护是做什么
  • 公司网站建设的建议搜索引擎营销概念
  • 在线免费网站seo站长工具
  • 网站建设费用如何收取中心网站建设
  • 个人可以做电商网站吗前端个人介绍网站模板下载
  • 四川省建设厅官方网站三内人员宽屏绿色新闻资讯网站织梦模板
  • 自己设置网站怎么做wordpress如何写网站
  • 只做动漫的网站网络推广培训中心
  • 电子商务系统的构成网站没有收录从哪开始做优化
  • 苏州企业网站制作服务无锡手工活外发加工网
  • 唐山地区网站开发公司如何做明星的个人网站
  • 网站建设综合技能实训四川建设安全生产监督管理局网站
  • 进下加强新闻宣传网站建设博客自适应模板
  • 用易语言做抢购网站软件下载那个做图网站叫什么
  • 比较好的响应式网站网络规划设计师企业数据中心机房建设
  • 网站 运营课程网站建设目标任务
  • 做网站哪便宜中国建设银行官网版本
  • 网站如何解析秒速网站建设
  • 网站设计申请书不用安装即可玩的游戏
  • 学做php网站有哪些如何在淘宝上做自己的网站
  • 专门做自助游攻略的网站是哪个网站开发与设计教程pdf
  • 网站做全景图网站模板英文