侵入式容器具有与 STL 容器类似的线程安全保证。
一些侵入式钩子(例如,自动解除链接钩子)在没有引用容器的情况下修改容器:这被认为是对此容器的写访问。
其他函数,例如使用安全钩子的 is_linked() 成员检查对象是否已插入容器,在没有引用容器的情况下构成了对容器的读访问,因此没有其他线程应该对此容器进行写访问(直接或间接)。
由于同一个对象可以使用不同的钩子同时插入到多个容器中,因此 Boost.Intrusive 的线程安全与容器以及用户手动管理的生命周期的对象有关。
正如我们所见,使用 Boost.Intrusive 的程序的线程安全分析比非侵入式容器更难。
要分析线程安全,请考虑以下几点
unlink() 函数会间接修改容器。is_linked() 函数是对容器的读访问。