我可以对线程使用 Boost.Geometry.index.rtree 吗?

Can I use Boost.Geometry.index.rtree with threads?

我正在尝试使用来自 Boost.Geometry 的 rtree 创建多线程空间索引,但是我无法确定这是否是线程安全的。我在 rtree.hpp 中没有看到任何锁定机制,但我的 C++/Boost 知识处于初学者水平。

Boost.Geometry.index.rtree 线程安全吗?如果不是,以安全的方式将它与多个线程一起使用的最佳方法是什么(例如,insert() 调用之间的互斥锁?我可以在 insert() 的同时查询()吗?)。具体来说,我正在尝试获得更好的查询(读取)性能。

Is Boost.Geometry.index.rtree thread safe in any way?

没有

If not, what would be the optimal approach to use it with multiple threads in a safe manner (e.g. mutex lock between insert() calls?

最优?视情况而定。

你需要互斥。您可以使用自旋锁、简单互斥锁、shared/upgradable 互斥锁等

Am I able to query() at the same time as insert()?).

当然不是。这就是所谓的数据竞争,这就是您首先需要互斥(又名监视器)的原因。

Specifically I'm trying to get better query (read) performance.

添加线程并不能使事情变得更快。它让事情变得更慢。总是。

诀窍在于您可以同时做其他事情


您/可以/运行 并行执行多个只读操作。通常,库容器可以安全地从多个线程用于只读操作(尽管您可能想要快速扫描隐藏的任何 mutable 成员(在实现中)。