नीचे दिए गए कोड में, यदि मैं 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;
}
आपको बहुत बहुत धन्यवाद! – Jack
क्या किसी भी समय एक const_accessor और एक एक्सेसर एक ही समय में संभव है? – Jack
@ जैक - नहीं। कोई लिखें तब नहीं होना चाहिए जब कोई भी पढ़ न सके, ताकि उनके पढ़ने वाले डेटा को दूषित करने से बचें। इसलिए लिखने के लॉक के दौरान कोई रीड लॉक हासिल नहीं किया जा सकता है, और इसके विपरीत। एक ही धागे में आप फिर से डेडलॉक करेंगे यदि दोनों एक्सेसर्स इसे जारी किए बिना डेटा हासिल करने का प्रयास करते हैं। सभी एक्सेसर्स के साथ विचार उन्हें छोटे ब्लॉक में उपयोग करना है, इसलिए वे आवश्यकतानुसार लंबे समय तक लॉक पर "चिपकते" नहीं हैं। कॉन्स्ट वाले लोग उस मामले के लिए एक अनुकूलन हैं जहां सिंक्रनाइज़ेशन की आवश्यकता नहीं है (हर कोई बस पढ़ता है, और लिखता नहीं है)। – StoryTeller