wait(阻塞当前线程,直到条件变量被唤醒)

#include <iostream>
#include <string>
#include <thread>
#include <mutex>
#include <condition_variable> std::mutex m;
std::condition_variable cv;
std::string data;
bool ready = false;
bool processed = false; void worker_thread()
{
// 等待直至 main() 发送数据
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []{return ready;}); // 等待后,我们占有锁。
std::cout << "Worker thread is processing data\n";
data += " after processing"; // 发送数据回 main()
processed = true;
std::cout << "Worker thread signals data processing completed\n"; // 通知前完成手动解锁,以避免等待线程才被唤醒就阻塞(细节见 notify_one )
lk.unlock();
cv.notify_one();
} int main()
{
std::thread worker(worker_thread); data = "Example data";
// 发送数据到 worker 线程
{
std::lock_guard<std::mutex> lk(m);
ready = true;
std::cout << "main() signals data ready for processing\n";
}
cv.notify_one(); // 等候 worker
{
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []{return processed;});
}
std::cout << "Back in main(), data = " << data << '\n'; worker.join();
}

最新文章

  1. exynos4412中断编程
  2. python 打印 网格
  3. 笔试常考的Linux命令大全
  4. macaca运行报错之chrome-driver问题处理,关闭 Chrome 的自动更新
  5. IOS第四天(4:下一题和选框的实现)
  6. ArcGIS中的坐标系定义与转换 (转载)
  7. Custom ASP.NET Application into SharePoint --整合ASP.NET应用程序到SharePoint
  8. FLASH轮播广告 在谷歌浏览器中不显示的解决办法(FLash轮播放广告在谷歌浏览器中无法显示处理方法)
  9. Java串口通信具体解释
  10. DNN Module - Responsive Html Tabs 3 介绍
  11. java算法 蓝桥杯 乘法运算
  12. 理解C++ lvalue与rvalue
  13. 如何在命令行中让python2和python3同存
  14. C#基础知识之IOC
  15. [认证授权] 5.OIDC(OpenId Connect)身份认证(扩展部分)
  16. 最大流 USTC1280
  17. 如何在grails2.3.x中的fork模式下进行调试?-【grails】
  18. Mybatis学习总结(二)——Mapper代理开发
  19. MBR详解
  20. Maya中输出nuke脚本的方法

热门文章

  1. 《Python学习手册 第五版》 -第18章 参数
  2. PowerShell初探
  3. Dapper操作MySQL数据库获取JSON数据中文乱码
  4. nop 配置阿里cdn 联通4g 页面显示不全 查看源代码发现被截断
  5. [math] Codeforces 597A Divisibility
  6. ELK 环境搭建总结
  7. 使用PyTorch建立你的第一个文本分类模型
  8. ​GAN的五大有趣应用
  9. 044.集群存储-StorageClass
  10. GitHub 运用实战入门,奶妈级教学