我在互斥析构函数中得到了字幕错误。由于错误可能是由于互斥锁在销毁期间处于锁定状态,所以我创建了一个从boost:mutex继承的新的互斥体类。它是确保互斥体在销毁期间解锁。但是,仍然会发生同样的错误。 任何点击将不胜感激!boost :: mutex ::〜mutex():声明`!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;
};
编辑: 是的,你是对的。我应该使用RAII。但是,我处于一种状况。我需要在另一个线程完成处理之前锁定资源。像下面的东西。
Thread A:
void getDate()
{
m_oLock.lock();
// access resource
}
void unlock()
{
m_oLock.unlock();
}
Thread B:
void Process()
{
threadA.getData();
threadA.unlock();
}
对不起。从核心来看,它表明它在互斥体的析构中失败了。是的。它只是一个测试来证明互斥锁处于解锁状态。 #0 0x0000003803030265来自/lib64/libc.so的raise()。6 (GDB)其中 #0 0x0000003803030265在从/lib64/libc.so.6 #1 0x0000003803031d10在中止()从/lib64/libc.so.6 #2 0x00000038030296e6在__assert_fail加注()(从)/ lib64/libc.so.6 #3 0x0000000000416314在boost :: mutex ::〜mutex()() –