Boost C++ 库

...是世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei AlexandrescuC++ Coding Standards

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

侵入式容器具有与 STL 容器类似的线程安全保证。

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

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

其他函数,例如使用安全钩子的 is_linked() 成员检查对象是否已插入容器,在没有引用容器的情况下构成了对容器的读访问,因此没有其他线程应该对此容器进行写访问(直接或间接)。

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

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

要分析线程安全,请考虑以下几点

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

PrevUpHomeNext