Boost C++ 库

...世界上评价最高、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

线程安全保证 - Boost C++ 函数库
PrevUpHomeNext

与 STL 容器一样,侵入式容器也具有线程安全保证。

  • 只要插入的对象不同,多个线程对不同实例进行读或写访问是安全的。
  • 对同一容器进行并发的只读访问是安全的。

一些侵入式钩子(例如,自动解除链接钩子)在没有引用容器的情况下修改容器:这被视为对容器的写访问。

其他函数,例如使用安全钩子的 is_linked() 成员来检查对象是否已插入到容器中,这构成对容器的读访问,而无需引用它,因此没有其他线程应该(直接或间接)对该容器进行写访问。

由于同一个对象可以使用不同的钩子同时插入到多个容器中,因此 Boost.Intrusive 的线程安全与容器以及用户手动管理的对象的生命周期有关。

正如我们所见,使用 Boost.Intrusive 的程序的线程安全分析比非侵入式容器更难。

为了分析线程安全,请考虑以下几点:

  • 自动解除链接钩子的析构函数和 unlink() 函数会间接修改容器。
  • 安全模式和自动解除链接钩子的 is_linked() 函数是对容器的读访问。
  • 将对象插入到将被不同线程修改的容器中没有线程安全保证,尽管在大多数平台上,在没有锁定的情况下它是线程安全的。

PrevUpHomeNext