我可以将 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() 调用之间的互斥锁?我可以在插入()的同时查询()吗?具体来说,我正在尝试获得更好的查询(读取)性能。
Boost.Geometry.index.rtree 线程以任何方式安全吗?
不
如果没有,以安全的方式将其与多个线程一起使用的最佳方法是什么(例如 insert() 调用之间的互斥锁?
最佳的?取决于。
你需要相互排斥。您可以使用自旋锁、简单互斥锁、共享/可升级互斥锁等来做到这一点。
我可以在插入()的同时查询()吗?
当然不是。这就是所谓的数据竞赛,它首先是您需要相互排斥(又名监视器)的原因。
具体来说,我正在尝试获得更好的查询(读取)性能。
添加线程不会让事情变得更快。它使事情变慢。总是。
诀窍是您可以同时做其他事情。
您可以并行运行多个只读操作。通常,库容器可以安全地从多个线程用于只读操作(尽管您可能希望对实现中隐藏的任何mutable
成员进行快速扫描)。
相关文章:
- C++无锁队列与多个线程一起崩溃
- QSocketNotifier:只能与以 QThread 错误开头的线程一起使用
- 无法将线程与第三方库一起暂停
- SetWindowShookex(WH_KEYBOARD)无法与线程ID一起使用
- 与多线程一起登录多进程应用程序
- 读者-作家-作家线程总是与多个读者线程纠缠在一起
- 如何将 Lambda 表达式与多线程一起使用
- 线程池与英特尔线程构建模块一起使用
- 我可以将 Boost.Geometry.index.rtree 与线程一起使用吗?
- 无法获得提升::线程与MSVS2013一起工作
- 如何将非阻塞套接字与多个线程一起使用
- 如何使 CDT/Eclipse 与 C++11 线程一起工作
- Qt同步原语可以与非QThread线程一起使用吗
- 代码步进如何与线程一起工作
- 与icc 14一起使用多线程运行时库时的错误
- 无效地将void表达式与线程和对象一起使用
- 如何将线程与递归模板函数一起使用
- 将 MPI 与线程一起使用的正确方法是什么
- 将 std::atomic_flag 与工作线程一起使用时出现问题
- 将 libev 与多个线程一起使用