gpt4 book ai didi

c++ - 为什么我不能为 tbb HashMap 中的同一元素设置两个访问器?

转载 作者:可可西里 更新时间:2023-11-01 17:44:17 35 4
gpt4 key购买 nike

在下面的代码中,如果我不释放 a1,代码似乎会陷入 map.find 函数内的无限循环。

如果我需要在应用程序的两个不同部分搜索一个元素怎么办?

#include <iostream>
#include "tbb/concurrent_hash_map.h"

using namespace std;
using namespace tbb;

void main()
{
concurrent_hash_map<int, int> map;

concurrent_hash_map<int, int>::accessor a1, a2;

map.insert(make_pair(1, 111));

cout << "a1 - " << map.find(a1, 1) << endl;

//a1.release();

cout << "a2 - " << map.find(a2, 1) << endl;
}

最佳答案

访问器允许写访问。这意味着一个写锁被获取,并且只被一个访问者持有。您进入死锁是因为同一个线程试图锁定同一个元素以通过不同的访问器进行写入。

如果您只想读取数据,则使用带有findconst_accessor。它只会获得一个读锁。可以获取并保持多个读锁而不会发生死锁。

concurrent_hash_map<int, int>::const_accessor a1, a2; 

关于c++ - 为什么我不能为 tbb HashMap 中的同一元素设置两个访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45274017/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com