मुझे mutex विनाशक में कैप्शन त्रुटि मिली। चूंकि त्रुटि म्यूटेक्स के कारण विनाश के दौरान लॉक स्थिति में हो सकती है, इसलिए मैं एक नया म्यूटेक्स वर्ग बनाता हूं जिसे बढ़ावा से विरासत में मिला है: mutex। यह सुनिश्चित करना है कि म्यूटेक्स विनाश के दौरान अनलॉक है। हालांकि, वही त्रुटि अभी भी होती है। किसी भी हिट की सराहना की जाएगी!boost :: mutex :: ~ mutex(): Assertion `! Pthread_mutex_destroy (& m) 'असफल
class CMutes : public boost::mutex
{
public:
CMutes()
{
};
virtual ~CMutes()
{
if (m_bLock)
boost::mutex::unlock();
};
void lock()
{
if(!m_bLock)
boost::mutex::lock();
else
cout << "Mutex is in lock state\n";
};
void unlock()
{
if (m_bLock)
boost::mutex::unlock();
else
cout << "Mutex is in unlock state\n";
}
boost::mutex& getMutex()
{
return *this;
}
private:
bool m_bLock;
};
संपादित करें: हाँ आप सही हैं। मुझे आरएआईआई का उपयोग करना चाहिए। हालांकि, मैं एक स्थिति में हूं। किसी अन्य थ्रेड को संसाधित करने से पहले मुझे संसाधन लॉक करने की आवश्यकता है। नीचे की तरह कुछ।
Thread A:
void getDate()
{
m_oLock.lock();
// access resource
}
void unlock()
{
m_oLock.unlock();
}
Thread B:
void Process()
{
threadA.getData();
threadA.unlock();
}
मुझे खेद है। कोर से, यह इंगित करता है कि यह म्यूटेक्स के विनाशक में विफल रहता है। और हाँ। यह साबित करने के लिए सिर्फ एक परीक्षण है कि म्यूटेक्स अनलॉक स्थिति में है। # 0x0000003803030265 /lib64/libc.so से raise() में।6 (gdb) जहां # 0 0x0000003803030265 __assert_fail में /lib64/libc.so.6 2 # 0x00000038030296e6 से से /lib64/libc.so.6 # 1 0x0000003803031d10 बीच में बंद करें() में उठाने के() में (से)/lib64/libc.so.6 # 3 0x0000000000416314 बढ़ावा में :: mutex :: ~ mutex()() –