问题:
为了确保高效的线程协调,std::condition_variables发挥着关键作用。然而,在调用notify_one()之前获取锁的必要性存在不确定性:它是强制性的,还是可选的做法?
解开谜团:
答案很明确:在调用notify_one()之前并不强制要求持有锁。然而,在某些情况下,获取锁是一种好的做法。让我们深入研究一下这背后的原因。
为什么要锁?
示例:两个通知的故事
提供的示例提出了有关不一致锁定的问题后续notify_one() 调用的行为。初始调用没有锁的原因是后面的等待操作:等待函数将自动获取和释放锁,确保被通知的线程可以继续执行。然而,后续的notify_one()调用会受到锁的保护,因为它们不涉及等待操作。
总而言之,在调用notify_one()之前持有锁并不是普遍要求,但这是推荐的做法某些场景。它可以减轻潜在的性能问题并确保数据完整性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3