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

电商网站开发实战视频教程推广竞价托管公司

电商网站开发实战视频教程,推广竞价托管公司,asp网站开发平台,教师做网站赚钱概述 std::condition_variable 是 C 标准库中用于线程间通信的同步原语。它允许一个或多个线程等待某个条件为真。通常与 std::mutex 一起使用,std::condition_variable 提供了两种主要的等待方式:wait 和 wait_for。 使用说明 初始化:std…

概述

std::condition_variable 是 C++ 标准库中用于线程间通信的同步原语。它允许一个或多个线程等待某个条件为真。通常与 std::mutex 一起使用,std::condition_variable 提供了两种主要的等待方式:waitwait_for

使用说明

  1. 初始化std::condition_variable 通常作为类的成员变量进行初始化。
  2. 等待:使用 waitwait_for 方法来阻塞当前线程,直到条件满足。
  3. 通知:使用 notify_onenotify_all 方法来唤醒等待的线程。

关键方法

  • void wait(std::unique_lock<std::mutex>& lock);

    • 使当前线程阻塞,直到条件变量被通知。
    • 调用 wait 之前,必须先对 std::mutex 进行上锁,并将锁对象传递给 wait 方法。
    • 当线程被唤醒时,它会自动重新获取锁。
  • template<class Rep, class Period> std::cv_status wait_for(std::unique_lock<std::mutex>& lock, const std::chrono::duration<Rep, Period>& rel_time);

    • 使当前线程阻塞指定的时间长度,或者直到条件变量被通知。
    • 如果在指定的时间内没有被通知,则返回 std::cv_status::timeout
  • void notify_one();

    • 唤醒一个正在等待的线程。
    • 如果有多个线程在等待,选择哪个线程被唤醒是不可预测的。
  • void notify_all();

    • 唤醒所有正在等待的线程。

使用示例

下面是一个简单的示例,展示了如何使用 std::condition_variable 来实现线程间的同步。这个例子中,主线程等待子线程完成某个任务。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>class Task {
public:void execute() {std::unique_lock<std::mutex> lock(mutex_);std::cout << "模拟一个耗时任务,开始!" << std::endl;std::this_thread::sleep_for(std::chrono::seconds(2));std::cout << "模拟一个耗时任务,结束!" << std::endl;status_ = true;// 通知等待的线程cv_.notify_one();}void waitUntilCompleted() {std::unique_lock<std::mutex> lock(mutex_);std::cout << "使用 wait 来等待任务完成!" << std::endl;cv_.wait(lock, [this]{ return status_; });// 当 wait 返回时,说明 status_ 为 truestd::cout << "任务已完成!" << std::endl;}private:std::mutex mutex_;std::condition_variable cv_;bool status_ = false;
};int main() {Task task;// 启动一个新线程执行任务std::thread worker([&task](){ task.execute(); });// 主线程等待任务完成task.waitUntilCompleted();std::cout << "等待子线程结束!" << std::endl;worker.join();std::cout << "子线程已结束!" << std::endl;return 0;
}

说明

  • execute 方法:模拟了一个耗时任务。在任务完成后,设置 status_true,并使用 notify_one 通知等待的线程。
  • waitUntilCompleted 方法:使用 wait 方法来等待 status_ 变为 truewait 方法的第一个参数是一个 std::unique_lock<std::mutex>,第二个参数是一个 lambda 表达式,该表达式返回一个布尔值,表示等待的条件。
  • main 函数:创建了一个 Task 对象,并启动了一个子线程来执行任务。主线程调用 waitUntilCompleted 方法来等待任务完成,然后等待子线程结束。

在这个示例中,std::condition_variable 被用来实现在任务完成时通知等待的线程。这样可以有效地避免 busy-waiting(忙等待),提高程序的性能和响应性。

执行结果

在这里插入图片描述

http://www.dtcms.com/wzjs/320897.html

相关文章:

  • 做b2b网站的人seo免费推广软件
  • 汕尾住房和建设局网站无锡优化网站排名
  • 手机网站开发视频网站优化建议
  • 手机在线做网站成都关键词优化服务
  • 做微信网站的职位郑州疫情最新情况
  • 去掉自豪的wordpress重庆seo网站推广费用
  • 做网站收录真的假的无锡网站seo
  • 在县城做团购网站新乡网络推广外包
  • 做外贸那里发广告网站自媒体推广渠道有哪些
  • 爱站网使用的是什么网站软文推广文章
  • 青岛网站建设套餐报价人际网络营销2900
  • 设计一个学院网站天津优化加盟
  • 苏州建设网站公司一键优化清理
  • 建设网站服务推广码怎么填
  • 做国外网站用什么颜色网上教育培训机构哪家好
  • 深圳比较好的设计院seo推广的方法
  • 手机壁纸网站源码关键词林俊杰免费听
  • app 网站今天刚刚发生的重大新闻
  • 汉阳网站推广佛山网络公司 乐云seo
  • 凡科做的网站要收费吗抖音seo推荐算法
  • 大金seo浑江区关键词seo排名优化
  • 网站开发费的税率是多少数据分析师报考条件
  • 宁波网络推广的公司报价佛山优化网站关键词
  • 网站建设的利益自建网站
  • 做的好看的网站站长工具查询域名
  • 龙岗网站建设_公司推广下载百度搜索
  • 郑州网站建设找伟置上海关键词优化公司bwyseo
  • 深圳优定软件网站建设十大成功营销策划案例
  • asp.net mvc5网站开发之美北京seo网站管理
  • 长春网站建设dbd3某网站搜索引擎优化