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

时间:2015-02-01 19:11:17

标签: c++ multithreading boost r-tree boost-geometry

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

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

1 个答案:

答案 0 :(得分:4)

  

Boost.Geometry.index.rtree线程是否安全?

  

如果没有,那么以安全的方式使用多个线程的最佳方法是什么(例如插入()调用之间的互斥锁?

最优?取决于。

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

  

我可以在insert()的同时查询()吗?)。

当然不是。这称为数据竞赛,它首先需要互斥(又称监视器)。

  

具体而言,我试图获得更好的查询(阅读)性能。

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

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


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

相关问题