我知道多个线程可以同时访问concurrent_unordered_map。在每个地图条目中,我想要一个互斥锁。
请看一下这段简单的代码:
struct MyStruct {
int a;
int b;
boost::mutex mtx;
};
// typedef boost::unordered_map<int, MyStruct> StructMap;
typedef tbb::concurrent_unordered_map<int, MyStruct> StructMap;
int main()
{
StructMap struct_map;
struct_map[0].a = 9;
MyStruct &struct_ref = struct_map[0];
}
无法使用tbb :: concurrent_unordered_map进行编译,但可以使用boost :: unordered_map进行编译。
此外,我发现当我在MyStruct中注释掉字段(boost :: mutex mtx)时,它可以使用tbb :: concurrent_unordered_map进行编译。
有谁知道为什么?
PS。它无法编译,因为编译器正在寻找boost :: mutex的复制构造函数,它不存在。我真的不知道为什么它需要一个构造函数,我只是引用它...
谢谢, 崔