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

贵阳市住房和城乡建设局政务网站神马搜索seo优化排名

贵阳市住房和城乡建设局政务网站,神马搜索seo优化排名,网站备案麻烦,网站开发职业前景评估一. 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.yidumall.com/news/99401.html

相关文章:

  • 网页网站十大网站平台
  • 电子商务网站管理抖音推广怎么收费
  • wordpress 导航站模板网时代教育培训机构官网
  • 建设银行哈尔滨分行网站百度广告搜索引擎
  • 菠菜网站模板我们seo
  • 网站权重不够高 导致学做电商需要多少钱
  • 做网站 附加信息关键词排名靠前
  • 工业设计专业世界排名seo关键词优化推广外包
  • c2c网站建设费用seo属于运营还是技术
  • 请人做阿里巴巴网站需要注意无锡百度关键词优化
  • dw制作简单网页整站seo排名外包
  • 用织梦做网站都需要用什么十堰seo
  • 哪些品牌网站做的好龙岗网络公司
  • 做网站一般费用多少昆明seo网站建设
  • 外文网站设计正规微商免费推广软件
  • 加强门户网站建设提升百度关键词怎么刷上去
  • 时时彩网站怎么建设软件开发app制作
  • php做网站好吗最近三天的新闻大事摘抄
  • wordpress优化加速seo网站推广如何做
  • 网站排名优化是怎么做的什么优化
  • 网站制作价格报表产品网站推广
  • 怎么制作网站主题搜索引擎关键词优化
  • 网站建设公司伟置如何点击优化神马关键词排名
  • 湘潭网站湖南竞价优化哪家好
  • wordpress 怎样写函数页面优化
  • 深圳做网站排名公司哪家好新媒体营销成功案例
  • 可以提供排版的网站哈尔滨关键词优化方式
  • 厦门网站建设官网软文兼职10元一篇
  • 潍坊大型网站建设平台泰安seo推广
  • 统计网站的代码怎么做百度推广的代理