Aşağıdaki kodda, a1
'u serbest bırakmazsam, kod map.find
işlevinin içinde sonsuz bir döngüde sıkışmış gibi görünüyor.Neden tbb hash haritasında aynı öğe için iki erişimci alamıyorum?
Uygulamanın iki farklı bölümünde bir öğe aramam gerekirse ne yapmalıyım?
#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;
}
Çok teşekkür ederim! – Jack
Bir şekilde aynı anda bir const_accessor ve bir accessor'a sahip olmak mümkün mü? – Jack
@Jack - Hayır. Okuma yazmalarını bozmaktan kaçınmak için kimsenin okumadığı zamanlarda A Yazması gerekir. Bu yüzden, bir yazma kilidi varken, bunun yerine bir okuma kilidi alınamaz ve bunun tersi de geçerlidir. Tek bir iş parçacığında, her iki erişimci de verileri serbest bırakmadan veriyi almaya çalışırsa tekrar kilitleneceksiniz. Tüm erişimcilerle fikir, onları küçük bloklarda kullanmaktır, bu yüzden kilitlemeye gerekenden daha uzun süre "yapışmaz". Const olanlar sadece senkronizasyonun gerekli olmadığı durum için bir optimizasyon (herkes okur, yazmaz). – StoryTeller