我正在尝试使用Boost.Geometry中的rtree创建多线程空间索引,但是我无法确定这是否是线程安全的。我在rtree.hpp中没有看到任何锁定机制,但我的C ++ / Boost知识是初学者级别的。
Boost.Geometry.index.rtree线程是否安全?如果没有,那么以安全的方式使用多个线程的最佳方法是什么(例如insert()调用之间的互斥锁?我能够在insert()的同时查询()吗?)。具体来说,我正在尝试获得更好的查询(读取)性能。
答案 0 :(得分:4)
Boost.Geometry.index.rtree线程是否安全?
否
如果没有,那么以安全的方式使用多个线程的最佳方法是什么(例如插入()调用之间的互斥锁?
最优?取决于。
您需要互相排斥。你可以使用自旋锁,简单的互斥锁,共享/可升级的互斥锁等来实现这一点。
我可以在insert()的同时查询()吗?)。
当然不是。这称为数据竞赛,它首先需要互斥(又称监视器)。
具体而言,我试图获得更好的查询(阅读)性能。
添加线程并不会让事情变得更快。它让事情变得更慢。总是
诀窍是你可以同时做其他事情。
你/可以/并行运行多个只读操作。通常,库容器可以安全地从多个线程用于只读操作(尽管您可能希望快速扫描隐藏的任何mutable
成员(在实现中)。