c++ - 可以从并行线程完成对 boost 的 rtree 的查询吗?

标签 c++ multithreading c++11 boost boost-geometry

我在应用程序中有两个模块。 Module1 拥有并构建 boost::geometry::index::rtreeModule2Module1 进行查询,然后传递给 RTree。现在我想加快速度并拥有多个 Module2 实例,它们对 one Module1 实例进行查询,并分别工作。我 100% 确定,虽然 任何 Module2 工作 RTree 都不会改变

我发现了这个问题:Can I use Boost.Geometry.index.rtree with threads? ,但它描述了更复杂的情况,即从不同线程修改和查询 rtree 时。这个答案是模棱两可的:“没有 boost Rtree 在任何方面都不是线程安全的”在回答中陈述。但在评论中指出:“进行查询是安全的,甚至可以为创建创建解决方法”。什么是正确答案?是否有任何资源可以找到答案,除了直接提出问题来 boost 作者?

我;博士:

从不同线程查询 boost::geometry::index::rtree 是否安全,如果我 100% 确定没有线程修改 RTree?

最佳答案

In answer to linked question: "No boost Rtree is not thread-safe in any way". But in comments: "It is safe to do queries, and it even possible to create workaround for creation". Who is right?

没有矛盾。亚当是作者。每个人都是对的。注意答案也说了

You /can/ run multiple read-only operations in parallel. Usually, library containers are safe to use from multiple threads for read-only operations (although you might want to do a quick scan for any mutable members hidden (in the implementation).

一般来说,只要按位表示不发生变化,并发访问 一切都是安全的。这与库支持无关。

请注意,由于 Adam Wulkiewicz 的权威评论,您不需要“快速扫描”。


脚注:这仍然不能使库线程安全。这是事实,因为 C++ 的内存模型不存在按位常量数据的数据竞争。

关于c++ - 可以从并行线程完成对 boost 的 rtree 的查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32739177/

相关文章:

c++ - 如何在启动期间从 FastCGI C++ 二进制文件获取环境变量

c++ - 理解指向设置为 NULL 的对象的指针的问题

c++ - 来自 Boost.Atomic 示例的无等待队列崩溃

c++ - 在 CRTP 基类的后期指定返回中使用 decltype

C++ 需要将一个字符串与 200.000 个单词进行比较

c++ - 如何知道 QLineEdit 是否获得焦点?

c++ - std::memory_order_relaxed 是否足以检查 "Availability"?

c# - ThreadPool.SetMinThreads() completionPortThreads 数量可以设置为0吗?

java - 在库中实现同步和异步方法的正确方法是什么?

c++ - IF 内有两个语句的简写 If/Else 语句