0

我的问题:如果我使用“只读”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 社区教程指南第 43 页描述了访问器的概念

4

1 回答 1

1

来自TBB 参考手册

访问器充当智能指针,指向concurrent_hash_map. 它持有一个对的隐式锁,直到实例被销毁或release在访问器上调用方法。

访问器在使用时获取锁。多个访问器可以同时存在。但是,如果一个程序同时使用多个访问器并且不释放锁,它很可能会死锁。

为避免死锁,请在访问完哈希映射条目后释放它的锁。

于 2012-07-08T18:25:27.503 回答