我的问题:如果我使用“只读”const_accessors,为什么我的程序会冻结?
似乎是锁定,从API描述看似可以有一个访问器和多个const_accessors,(编写器,阅读器)。也许有人可以告诉我一个不同的故事。
我尝试实现的目标是使用此并发哈希映射并使其可用于10-200个线程,以便它们可以查找和添加/删除信息。如果你有一个比我现在使用的更好的解决方案,你也欢迎发布替代方案。
tbb::size_t hashInitSize = 1200000;
concurrent_hash_map<long int,char*> hashmap(hashInitSize);
cout << hashmap.bucket_count() << std::endl;
long int l = 200;
long int c = 201;
concurrent_hash_map<long int,char*>::accessor o;
concurrent_hash_map<long int,char*>::const_accessor t;
concurrent_hash_map<long int,char*>::const_accessor h;
cout << "Trying to find 200 "<< hashmap.find(t,200) << std::endl;
hashmap.insert(o,l);
o->second = "testother";
TBB Community Tutorial Guide描述了访问者的概念
答案 0 :(得分:1)
访问者充当
concurrent_hash_map
中对的智能指针。它保持对一对的隐式锁,直到实例被销毁或在访问器上调用方法release
。
访问者在使用时获取锁定。多个访问者可以同时存在。但是,如果程序同时使用多个访问器并且不释放锁,则可能会死锁。
要避免死锁,请在完成访问后释放哈希映射条目上的锁。