我有要插入到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)形式。这将有助于减少线程安全的开销

10-06 01:27