我怎么知道使用boost在c ++中锁定需要保护的共享变量?

jon*_*rry 2 c++ multithreading boost

例如,如果互斥锁对多线程访问不具有弹性,则多线程将永远不会工作(例如,两次同时调用mutex.lock()无法解决问题).

这是否也扩展到条件变量?具体来说,我想释放一个锁,然后调用cond.notify_one().从理论上讲,另一个线程可以在通知之前获取锁,并开始自己调用cond.notify_one().是否保证这将是良好的行为?

那么在堆上分配的简单数据结构怎么样?如果只读取数据结构,是否可以允许并发访问,假设数据结构保证不会在读取时自行调整?是否存在stl数据结构和成员函数允许并发读取而不需要锁定的文档?

Jam*_*lis 6

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

  1. 该对象由多个线程使用
  2. 这些线程中的至少一个可以修改该对象.

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

是否有文档说明哪些STL数据结构和成员函数允许并发读取而不需要锁定?

任何const限定的成员函数都应该是安全的.

Herb Sutter撰写了一系列关于有效并发的文章,您可能会发现它们很有用.他讨论了各种设计模式,常见陷阱,锁层次结构和其他并发主题.