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

网站是哪个公司做的菜鸟制作个人网站网页实例

网站是哪个公司做的,菜鸟制作个人网站网页实例,官方进一步优化,深圳创意网站设计前言 在多线程编程中,线程之间的同步是一个重要的课题。std::condition_variable 提供了一种机制,允许线程在某些条件满足之前进行等待。我们通常使用 wait 和 wait_for 等函数来控制线程的阻塞和唤醒。虽然这两个函数看起来类似,但它们之间…

在这里插入图片描述

前言

在多线程编程中,线程之间的同步是一个重要的课题。std::condition_variable 提供了一种机制,允许线程在某些条件满足之前进行等待。我们通常使用 waitwait_for 等函数来控制线程的阻塞和唤醒。虽然这两个函数看起来类似,但它们之间存在一些重要的区别。在本文中,我们将详细介绍这两者的差异以及它们适用的场景。

std::condition_variable::wait:无限等待

1. 基本功能:

m_cv.wait(lock) 是条件变量最常见的使用方式。它的作用是让当前线程进入阻塞状态,直到以下两个条件之一发生:

  • 条件变量被通知(notify_one()notify_all() 被调用)。
  • 条件变量的状态满足某个条件,通常需要在等待前和后检查某个共享数据。

当线程调用 wait 时,它会释放与之相关联的锁 (std::unique_lockstd::lock_guard),允许其他线程在等待期间修改共享数据。当通知发生时,线程会重新获得锁,并继续执行。

2. 代码示例:

std::unique_lock<std::mutex> lock(m_mutex);
m_cv.wait(lock);  // 阻塞当前线程直到被通知

3. 适用场景:

m_cv.wait(lock) 非常适用于以下场景:

  • 你希望线程在没有条件满足时保持等待状态,直到其他线程调用通知。
  • 适合于生产者-消费者模型,或者任何需要等待特定条件触发的同步场景。
4. 注意事项:
  • 由于该函数会阻塞线程直到通知,因此它可能会导致线程长时间处于等待状态,这时我们通常会在 wait 调用之前判断条件,以确保线程只有在真正需要等待时才进入阻塞。

std::condition_variable::wait_for:带超时的等待

1. 基本功能:

wait 不同,m_cv.wait_for(lock, std::chrono::milliseconds(100)) 允许我们在等待时设置超时时间。在这个例子中,当前线程会等待最多 100 毫秒,或者直到被通知为止。

如果超时后线程仍然没有收到通知,wait_for 会自动返回 false,表示超时发生。否则,如果条件满足,或者收到了通知,它会返回 true

2. 代码示例:

std::unique_lock<std::mutex> lock(m_mutex);
bool notified = m_cv.wait_for(lock, std::chrono::milliseconds(100));  // 等待最多100毫秒
if (!notified) {std::cout << "超时未收到通知" << std::endl;
} else {std::cout << "收到通知" << std::endl;
}

3. 适用场景:

m_cv.wait_for 在以下情况下非常有用:

  • 你希望给等待的线程设置一个最长等待时间,避免线程在无条件满足时一直阻塞。
  • 适用于一些需要响应超时的应用,比如定时任务,或者在一定时间内需要获取资源的场景。

4. 注意事项:

  • 如果设置了超时时间,线程在超时后会返回。这时,我们可以根据返回值来决定是否继续执行,或者处理超时的逻辑。
  • 超时机制避免了死锁的风险,但也可能导致线程在超时后执行不完整的任务,因此需要在应用中合理使用。

区别总结

特性m_cv.wait(lock)m_cv.wait_for(lock, timeout)
超时控制无限等待,直到收到通知设置一个最大等待时间,超时后返回 false
返回值没有返回值,线程在通知时继续执行返回 truefalse,表示是否在超时前收到通知
使用场景适合需要等待某个条件或事件发生的场景适合需要控制等待时间,避免死锁的场景
阻塞行为无限阻塞直到条件满足阻塞指定时间后自动返回

什么时候使用 wait,什么时候使用 wait_for

  • 使用 wait 当你希望线程在没有收到通知之前一直阻塞,并且没有必要关心等待的最大时间时,使用 wait
  • 使用 wait_for 当你希望线程在等待时能够响应超时,或者希望限制等待时间,避免线程长时间处于阻塞状态时,使用 wait_for

总结

std::condition_variable 提供了强大的线程同步能力,尤其是在处理多线程之间的通知和协调时非常有用。理解 waitwait_for 之间的区别,并根据实际需求选择合适的等待方式,是编写高效且安全的多线程代码的关键。在选择这两者时,你需要考虑是否需要超时机制,以及如何处理超时后可能的错误或恢复逻辑。


文章转载自:

http://AIn83u1p.sygLx.cn
http://PXqqCI8M.sygLx.cn
http://Hn5CVxWB.sygLx.cn
http://iIvpTli1.sygLx.cn
http://Xda9rQwc.sygLx.cn
http://KyeA3hjg.sygLx.cn
http://83ykfAWS.sygLx.cn
http://SZiETfg0.sygLx.cn
http://hMj68hxJ.sygLx.cn
http://BgloEEfc.sygLx.cn
http://6RGXbGYv.sygLx.cn
http://71l0RsSc.sygLx.cn
http://QMnlzjl5.sygLx.cn
http://9roNHEKN.sygLx.cn
http://U40oSWJX.sygLx.cn
http://gKAKi0kM.sygLx.cn
http://6mUhh7Hn.sygLx.cn
http://mZxWXt1e.sygLx.cn
http://R8fDRdui.sygLx.cn
http://2PideCXN.sygLx.cn
http://wAKXNdEJ.sygLx.cn
http://ySAeZAdO.sygLx.cn
http://fCe18cFY.sygLx.cn
http://NCDCOXKw.sygLx.cn
http://BeeDFvMW.sygLx.cn
http://LIONyLkH.sygLx.cn
http://fDNO3CEc.sygLx.cn
http://bitCYp70.sygLx.cn
http://YvdHBPUI.sygLx.cn
http://GDkHbLJ0.sygLx.cn
http://www.dtcms.com/wzjs/766510.html

相关文章:

  • 做外贸应该去什么网站wordpress登录链接
  • seo网站关键词优化工具wordpress iis 中文乱码
  • 直播网站建设1个节点多少钱贵阳做网站软件
  • 网站建设流程时间表不良网站代码怎么查
  • 具有价值的响应式网站建程网土石方工程
  • 济南润尔网站建设技术公司江西赣州公司
  • 代理下单网站开发广州小型企业网站建设
  • 什么网站做简历模板宁波 手机网站建设
  • 免x网站wordpress界面变宽
  • 做网站和做app哪个贵哪个网站做照片书最好看
  • 建筑专业网站建设怎么创作一个微信小程序
  • 河南 网站建设网站开发产品规划要求
  • 旅游网站系统设计与开发无锡网站推广无锡做网站
  • 网站备案证图片做网站要用什么语言
  • 网站建设高考题佛山网站建设公司价格多少
  • 新网站如何被网站收录网站建设服务器介绍图片
  • 天津企业模板建站建站快车源码
  • 金融产品做网站推广温州网页网站制作
  • 企业不想做网站的原因我想开个公司怎么注册
  • 建网站 英文视频直播app
  • 廊坊建设网站平面设计多久能学会
  • 广告联盟建设个人网站互联网营销师国家职业技能标准
  • 用c 怎么做网站系统wordpress流量插件
  • qq网站空间赞国际网站建设工具
  • 天津网站建设制作wordpress 过滤钩子
  • 永康市住房建设局网站网站系统升级维护需要多长时间
  • 注册安全工程师建设工程网站东方购物网上商城
  • 具有口碑的柳州网站建设价格wordpress 权限阅读
  • svn教程图文详解 - 青岛网站建设做网站注册几类商标
  • 怎么在百度提交网站旅游网页