我有要插入到tbb的并发哈希图中的项目列表。使用访问器的正确方法是1还是2?
// way 1
for (a list of (keys,values))
{
MAP::accessor a;
myHashTable.insert(a, key);
(a->second).push_back(value);
a.realease();
}
// way 2
MAP::accessor a;
for (a list of (keys,values))
{
myHashTable.insert(a, key);
(a->second).push_back(value);
a.realease();
}
最佳答案
基本上都是这样,因为您显式调用了accessor::release()
。但是通常,从代码质量的 Angular 来看,我将锁定的范围限制在最小的必要区域,因为代码可能会以意想不到的方式进一步扩展或/和异常(exception)安全性可能成为问题。
没有显式发布的第三种方式是:
// way 3
for (a list of (keys,values))
{
MAP::accessor a;
myHashTable.insert(a, key);
(a->second).push_back(value);
}
附言尽量避免在序列号中使用访问器(accessor),例如使用insert(value_type)形式。这将有助于减少线程安全的开销