मेरे छोटा, सरल बनाया वर्ग के रूप में निम्नानुसार है:"नेस्ट" scoped_lock
class A
{
public:
// ...
methodA();
methodB();
protected:
mutable boost::mutex m_mutex;
sometype* m_myVar;
}
A::methodA(int someParam)
{
boost::mutex::scoped_lock myLock(m_mutex);
m_myVar->doSomethingElse();
}
A::methodB(int someParam)
{
boost::mutex::scoped_lock myLock(m_mutex);
m_myVar->doSomething();
this->methodA(someParam);
}
मैं m_myVar
पर पहुँच सिंक्रनाइज़ करना चाहते हैं। जब A::methodB()
बुला, धागा दो बार और स्पष्ट रूप से A::methodA()
की पहली पंक्ति पर ब्लॉक एक ही म्युटेक्स साथ लॉक में चलाता है वहाँ जब फिर से गुजर एक ही धागे अवरुद्ध नहीं scoped_lock
बनाने के लिए कोई तरीका है?
निश्चित रूप से, मैं बस m_mutex.unlock()
पर कॉल कर सकता हूं। लेकिन यह अन्य थ्रेड लॉक पर भी इंतजार कर देगा - जो बिल्कुल मैं नहीं चाहता हूं।
कोई विचार?
सादर टोबियास
'बूस्ट :: mutex' – BatchyX