我正在尝试解决与hash_maps有关的问题。由于我拥有大量数据,并且可以对普通的hash_map进行并发读写访问,因此我决定使用tbb parallel_hash_map。这是一个英特尔库。我们期望在使用此功能后获得更好的读写并发性。
但是我们不能前进很多。下面是问题所在:
#include <iostream>
#include "tbb/concurrent_hash_map.h"
using namespace tbb;
using namespace std;
typedef concurrent_hash_map<long int,char*> data_hash;
int main(){
data_hash dh;
data_hash::accessor a;
long int k=10;
dh.insert(a,k);
a->second="hello";
for(data_hash::iterator j=dh.begin();j!=dh.end(); ++j){
std::cout << "%lu %s\n",j->first,j->second;
}
if(dh.find(a,9)) {
std::cout << "true\n";
} else {
std::cout << "false\n";
}
a.release();
return 0;
}
使用g ++编译时,出现以下错误:
在函数
tbb::spin_rw_mutex_v3::scoped_lock::acquire(tbb::spin_rw_mutex_v3&, bool)': demochashmap.cpp:(.text._ZN3tbb16spin_rw_mutex_v311scoped_lock7acquireERS0_b [tbb::spin_rw_mutex_v3::scoped_lock::acquire(tbb::spin_rw_mutex_v3&, bool)]+0x3c): undefined reference to
中,tbb :: spin_rw_mutex_v3 :: internal_acquire_writer()' demochashmap.cpp :(。text._ZN3tbb16spin_rw_mutex_v311scoped_lock7acquireERS0_b [tbb :: spin_rw_mutex_v3 :: scoped_lock :: acquire(tbb :: spin_rw_mutex_v3&,bool)] + 0bb3t:r:w:t:w:t:w:3:x:t:t:w:3:x: upgrade_to_writer()': demochashmap.cpp :(。
我了解程序在错误消息中看不到提到的函数的定义。据我们了解,包含文件“ #include“ tbb / concurrent_hash_map.h””就足够了。
不确定我应该尝试什么。