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