我可以将 Boost.Geometry.index.rtree 与线程一起使用吗?

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

本文关键字:一起 线程 Boost Geometry index rtree 我可以      更新时间:2023-10-16

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

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

Boost.Geometry.index.rtree 线程以任何方式安全吗?

如果没有,以安全的方式将其与多个线程一起使用的最佳方法是什么(例如 insert() 调用之间的互斥锁?

最佳的?取决于。

你需要相互排斥。您可以使用自旋锁、简单互斥锁、共享/可升级互斥锁等来做到这一点。

我可以在插入()

的同时查询()吗?

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

具体来说,我正在尝试获得更好的查询(读取)性能。

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

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


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