Tôi nhận được lỗi phụ đề trong trình phá hủy mutex. vì lỗi có thể do mutex ở trạng thái khóa trong quá trình hủy, tôi tạo một lớp mutex mới được thừa hưởng từ boost: mutex. nó là để đảm bảo mutex được mở khóa trong quá trình hủy diệt. Tuy nhiên, lỗi tương tự vẫn xảy ra. Bất kỳ lượt truy cập nào sẽ được đánh giá cao!boost :: mutex :: ~ mutex(): Xác nhận `! Pthread_mutex_destroy (& m) 'không thành công
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;
};
EDIT: Có bạn đúng. Tôi nên sử dụng RAII. Tuy nhiên, tôi đang ở trong một tình huống. Tôi cần khóa một tài nguyên trước khi một luồng khác kết thúc xử lý nó. một cái gì đó như dưới đây.
Thread A:
void getDate()
{
m_oLock.lock();
// access resource
}
void unlock()
{
m_oLock.unlock();
}
Thread B:
void Process()
{
threadA.getData();
threadA.unlock();
}
Tôi xin lỗi. từ lõi, nó chỉ ra rằng nó thất bại trong destructor của mutex. Và vâng. nó chỉ là một thử nghiệm để chứng minh rằng mutex đang ở trạng thái mở khóa. # 0 0x0000003803030265 trong việc tăng() từ /lib64/libc.so.6 (gdb) trong đó # 0 0x0000003803030265 tăng() từ /lib64/libc.so.6 # 1 0x0000003803031d10 trong hủy bỏ() từ /lib64/libc.so.6 # 2 0x00000038030296e6 trong __assert_fail() từ/lib64/libc.so.6 # 3 0x0000000000416314 trong tăng :: mutex :: ~ mutex()() –