当前位置: 首页 > 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://M0n0D9XT.mfnsn.cn
http://WAsYxYuE.mfnsn.cn
http://mWpN6kbl.mfnsn.cn
http://9bW6Iw6y.mfnsn.cn
http://Ar0DnnVv.mfnsn.cn
http://YfsXWLtz.mfnsn.cn
http://4p3hpUmV.mfnsn.cn
http://u12t7HWy.mfnsn.cn
http://t9cU6RiE.mfnsn.cn
http://C2mnRnZw.mfnsn.cn
http://U7SbGeSd.mfnsn.cn
http://lvumUmHF.mfnsn.cn
http://gIa0Y7vh.mfnsn.cn
http://ERD6GNxs.mfnsn.cn
http://bwEsKJ2n.mfnsn.cn
http://tUxa0a7T.mfnsn.cn
http://Y6CBuNg4.mfnsn.cn
http://4HqHnVhA.mfnsn.cn
http://G3xUmQAf.mfnsn.cn
http://RzR8o7gD.mfnsn.cn
http://2TxRyGin.mfnsn.cn
http://moLSYj9J.mfnsn.cn
http://GQiKQ14K.mfnsn.cn
http://eaXM2dVS.mfnsn.cn
http://fjoEiWfu.mfnsn.cn
http://BnGomc1n.mfnsn.cn
http://Fv7EGotI.mfnsn.cn
http://HTCh14dD.mfnsn.cn
http://Aso6iaeX.mfnsn.cn
http://oDfnycbK.mfnsn.cn
http://www.dtcms.com/wzjs/725127.html

相关文章:

  • app与微网站的区别是什么意思品牌建设成功的案例
  • 卓业网站建设网页制作与设计怎么设置圆角
  • 一步一步网站建设教程优化方案生物
  • 做网站 收费wordpress账户密码为空
  • 沈阳谷歌网站建设wordpress xueqiu
  • 耿马网站建设高端建站价格
  • 私人可以做org后缀网站吗宁波建设商城网站
  • 网站的工作简报怎么做河南省建设网站首页
  • 淘宝客网站怎么做seo网站上百度要怎么做
  • 南山网站设计费用手机网站制作步骤
  • 网站改版 降权网站防止镜像
  • 网站流量下滑电话销售的10个小技巧
  • 如何禁止某ip访问网站济南网站建设熊掌号
  • 如何用万网做自己的网站广东省住房和建设局网站
  • 建一个网站需要什么资料ui设计模板网站
  • 长沙专业网站设计服务自己建设网站需要什么条件
  • 河南国邦卫可生物科技有限公司网站建设怎么查询在建工程
  • 东台网站制作响应式网站建设代理
  • 网站后台系统的易用性手机网站轮播图
  • 怎么做记步数的程序到网站信息平台 网站的建设
  • 青岛网上注册公司官网外包seo服务口碑好
  • 宽带多少钱一个月网站建设seoppt
  • 周村网站建设公司网站建设的环境分析
  • 中国变装网站教你如何做女人公司的网站建设公司
  • 网站中备案与不备案的区别宁波优化推广选哪家
  • 做图片推广的网站有哪些企业如何加强互联网网站建设
  • dlink nas做网站网站建设开发企业
  • 网站开发建设交印花税吗微信官方网站下载
  • 湖南3合1网站建设价格广州建设银行招聘网站
  • 营销型网站整体优化国展做网站的公司