C++ opencv::flann:Index knnsearch线程安全吗?

C++ opencv::flann:Index knnsearch线程安全吗?,c++,multithreading,opencv,openmp,C++,Multithreading,Opencv,Openmp,我正试图将我的ML问题与flann索引并行化。简而言之,我的代码如下所示: Index index(dict, KDTreeIndexParams(TREE_NUM)); // HUGE dict, very expensive to construct -- prefer to create it once. #pragma omp parallel for for (int i = 0; i < featuresize; i++) { // creating thread-lo

我正试图将我的ML问题与flann索引并行化。简而言之,我的代码如下所示:

Index index(dict, KDTreeIndexParams(TREE_NUM)); // HUGE dict, very expensive to construct -- prefer to create it once.
#pragma omp parallel for
for (int i = 0; i < featuresize; i++) {
    // creating thread-local params
    auto denseTF = index.knnSearch(<thread-local params>);
    // not relevant code
}
索引(dict,KDTreeIndexParams(TREE_NUM));//巨大的dict,构建起来非常昂贵——宁愿创建一次。
#pragma-omp并行
对于(int i=0;i
我查阅了文档,但那里没有关于线程安全的内容。
我关心的是这个代码段是否是线程安全的

经过一天的调试、捕捉数据竞争并阅读源代码()之后,我可以得出结论,
index.knnSearch
不是线程安全的


在内部,
indexTree
正在
knnSearch
调用中更新。我通过为每个线程创建一个
index
副本解决了这个问题(是的,它很昂贵,但仍然比顺序代码快)。

经过一天的调试、捕捉数据竞争并阅读源代码()后,我可以得出结论
index.knnSearch
不是线程安全的


在内部,
indexTree
正在
knnSearch
调用中更新。我通过为每个线程创建一个
索引
副本来解决这个问题(是的,它很昂贵,但仍然比顺序代码快)。

文档在这方面有点欠缺,不是吗?由于这些信息在您的案例中至关重要,您是否考虑过询问OpenCV开发人员?文档在这方面有点欠缺,不是吗?由于这些信息在您的案例中至关重要,您是否考虑过询问OpenCV开发人员?嘿,不幸的是,您的源代码链接仅指向常规文件,而没有链接到稳定的修订版。你知道为什么搜索不是线程安全的吗?它不应该是一个只读操作,从而自动成为线程安全的吗?嘿,不幸的是,您的源代码链接只是到常规文件,而没有链接到稳定的修订版。你知道为什么搜索不是线程安全的吗?它不应该是一个只读操作,从而自动成为线程安全的吗?