gpt4 book ai didi

c++ - 我如何知道我需要使用 boost 在 C++ 中使用锁来保护哪些共享变量?

转载 作者:太空狗 更新时间:2023-10-29 23:47:46 25 4
gpt4 key购买 nike

例如,如果互斥体对多线程访问没有弹性(例如,同时调用 mutex.lock() 不能搞砸),多线程将永远无法工作。

这是否也适用于条件变量?具体来说,我想释放一个锁,然后调用 cond.notify_one()。理论上,另一个线程可以在通知之前获取锁并开始它自己对 cond.notify_one() 的调用。是否可以保证这会表现良好?

分配在堆上的简单数据结构呢?如果数据结构只被读取,允许并发访问是否可以,假设数据结构保证不会在读取时 self 调整?是否有关于哪些 STL 数据结构和成员函数允许并发读取而不需要锁定的文档?

最佳答案

您需要同步对任何对象的访问

  1. 该对象被多个线程使用并且
  2. 这些线程中至少有一个可以修改该对象。

有多种方法可以实现这种同步:锁(互斥锁)和原子可能是最常用的两种,尽管某些数据结构有无锁实现。

Is there documentation on which STL data structures, and member functions allow concurrent reads without requiring locking?

任何 const 限定的成员函数都应该可以安全调用。

Herb Sutter 写过 a whole series of articles on Effective Concurrency您可能会发现它很有用。他讨论了各种设计模式、常见陷阱、锁层次结构和其他并发主题。

关于c++ - 我如何知道我需要使用 boost 在 C++ 中使用锁来保护哪些共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3961752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com