8
在下面的代碼中,如果我沒有發佈a1
,代碼似乎陷入map.find
函數內部的無限循環中。爲什麼我不能在tbb哈希映射中爲同一個元素使用兩個訪問器?
如果我需要在應用程序的兩個不同部分搜索元素,該怎麼辦?
#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;
}
非常感謝! – Jack
是否有可能以某種方式同時有一個const_accessor和一個訪問器? – Jack
@Jack - 否。在沒有人正在讀取時寫入必須發生,以避免損壞讀取的數據。因此,在寫入鎖定時不能讀取鎖定,反之亦然。在單個線程中,如果這兩個訪問器都試圖獲取數據而不釋放它,則會再次發生死鎖。與所有訪問者的想法是使用它們在小塊,所以他們不會「鎖」的時間超過要求的鎖。對於不需要同步的情況,Const(常量)只是一種優化(大家只是讀取,而不是寫入)。 – StoryTeller