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

湛江市建设教育协会学校网站家里电脑做网站服务器

湛江市建设教育协会学校网站,家里电脑做网站服务器,游戏开发代码,wordpress首页标题分隔符修改一:概述: 在 C 中,条件变量(std::condition_variable)是一种用于线程间同步的机制,主要用于在多线程环境中让一个线程等待某个条件满足后再继续执行。条件变量通常配合互斥锁(std::mutex&#…

一:概述:

在 C++ 中,条件变量std::condition_variable)是一种用于线程间同步的机制,主要用于在多线程环境中让一个线程等待某个条件满足后再继续执行。条件变量通常配合互斥锁(std::mutex)使用,保证了在访问共享数据时不会发生竞态条件。

二:条件变量的用途:

条件变量用于在某个线程等待另一个线程满足特定条件时进行同步。这通常用于以下几种情况:

  • 生产者-消费者问题:当缓冲区为空时,消费者线程等待生产者线程生产数据;当缓冲区满时,生产者线程等待消费者线程消费数据。
  • 线程池:工作线程等待任务队列中有任务可处理。
  • 任务调度:线程等待其他线程完成某些前置任务。

三:条件变量的工作原理:

  1. 等待条件:线程可以在条件变量上等待,直到某个条件成立(例如,某个标志被设置)。
  2. 通知条件:当某个线程修改共享数据并满足条件时,它可以通过条件变量通知等待的线程,通常使用 notify_one()notify_all() 方法。

四:核心方法:

  • wait:让当前线程等待,直到满足指定条件。在调用 wait 时,条件变量会自动释放与之关联的互斥锁,等待条件满足后再重新获取锁。
  • notify_one:唤醒一个在条件变量上等待的线程。如果没有线程在等待,它什么也不做。
  • notify_all:唤醒所有在条件变量上等待的线程。

五:条件变量的使用注意事项:

  1. 避免虚假唤醒:条件变量的 wait 方法会有可能被虚假唤醒(即条件未改变时线程被唤醒)。因此,通常需要在 wait 语句中使用一个循环来检查条件:
    while (!condition) {cv.wait(lock);
    }
    
  2. 锁的管理wait 会释放互斥锁并进入休眠状态,直到被通知并且重新获得锁。使用 std::unique_lock 管理锁是推荐的做法,因为它支持锁的自动管理。
  3. notify_one vs notify_allnotify_one() 只会唤醒一个线程,而 notify_all() 会唤醒所有等待的线程。根据需要选择使用哪一个方法,通常只有一个线程需要继续时使用 notify_one(),而如果有多个线程依赖于同一条件时,则可能需要使用 notify_all()

六:示例

#include <condition_variable>
#include <iostream>
#include <thread>
#include <mutex>bool dataReady = false; std::mutex mutex_;
std::condition_variable condVar1; 
std::condition_variable condVar2; int counter = 0;
int COUNTLIMIT = 50; void setTrue()
{while (counter <= COUNTLIMIT){std::unique_lock<std::mutex> lck(mutex_);condVar1.wait(lck, [] {return dataReady == false; });dataReady = true; ++counter;std::cout << dataReady << '\n';condVar2.notify_one();}
}void setFalse()
{while (counter <= COUNTLIMIT)  // 循环直到 counter 达到 COUNTLIMIT{std::unique_lock<std::mutex> lck(mutex_);  // 获取互斥锁,保护共享数据condVar2.wait(lck, [] {return dataReady == true; });  // 等待条件变量,直到 dataReady 为 truedataReady = false;  // 修改 dataReady 为 falsestd::cout << dataReady << '\n';  // 输出 dataReady 的值(即 false)condVar1.notify_one();  // 唤醒另一个线程,通知它继续执行}
}int main()
{std::cout << std::boolalpha << '\n'; std::cout << "Begin: " << dataReady << '\n'; std::thread t1(setTrue);std::thread t2(setFalse);t1.join();t2.join();dataReady = false;std::cout << "End: " << dataReady << '\n';std::cout << '\n';return 0; 
}

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

相关文章:

  • 哪个网站可以做销售记录马鞍山人才网
  • 给我一个网站贴吧wordpress视频播放插件下载
  • 宝安品牌网站建设wordpress文章地址
  • 免费信息网站建设平台短视频广告制作公司
  • 建设网站对于电商的作用是?专业做根雕的网站
  • 买网站vultr怎么做网站
  • 用dw怎么做网站后台公司网站服务费计入什么科目
  • 如何免费创建网站平台国内外网站建设比较
  • 网站开发技术是什么怎样建设一个自己的网站微商
  • 网站开发人员上级主管wordpress多用户 2015
  • 网站瀑布流怎么做铁岭做网站公司信息
  • 电子商务网站开发教程课本例题怎么在网站上放广告
  • 专业网站建设兴田德润沈阳医大男科怎么样
  • 如何用源码做网站地税城市维护建设税网站是什么
  • 服装设计师接单网站出入成都通知今天
  • 自己做免费手机网站吗海珠区
  • 八冶建设集团有限公司网站深圳品牌医疗网站建设
  • 阿里云搭建公司网站wordpress 编辑主题 保存
  • 做名片网站最新seo课程
  • 用凡科做网站好吗yangdesign工业设计公司
  • 云南网站建设锐网网站建设中英文
  • 网站开发最佳组合追天网站建设 优帮云
  • 民众镇做网站公司仙桃网站定制
  • 怎么做一个企业网站杭州公司注销流程及费用
  • 石河子网站设计还有什么网站可以做面包车拉货
  • 做网站鼎盛网站建设的费用记什么科目
  • 建设银行软件官方网站东莞大朗最新通告
  • 学做网站需要哪几本书google怎么推广
  • 珠海网站制作策划网站后台编码
  • 网站关键词搜不到了域名注册价格及续费