如何跟踪代码以找出导致问题的互斥锁

时间:2019-06-10 11:19:52

标签: c++ mutex destructor destroy boost-mutex

我有一些具有许多功能和线程以及许多不同互斥量的代码。有时候代码运行良好,有时候我会遇到这些错误之一

1)“ /usr/include/boost/thread/pthread/mutex.hpp:111:boost::mutex::~mutex():断言'!res'失败。”

2)“ /usr/include/boost/thread/pthread/condition_variable.hpp:168:boost :: condition_variable_any ::〜condition_variable_any():断言'!pthread_mutex_destroy(&internal_mutex)'失败。”

我认为互斥锁之一可能在被解锁之前就被销毁了。因此,我调查了析构函数中的所有pthread_mutex_destroys,但是找不到任何问题。

例如,破坏者之一就是波纹管

~class1(){ 
// unlock threads waiting at push or pop
pthread_mutex_lock(&mutex);
pthread_cond_signal(cv1);
pthread_cond_signal(cv2);
pthread_mutex_unlock(&mutex);

// wait for threads blocked in push or pop to exit
while(number_of_threads>0){
usleep(100);
}

//wait them to exit and destroy cv and mutex 
pthread_mutex_lock(&mutex);
pthread_cond_destroy(&cv1);
pthread_cond_destroy(&cv2);
pthread_mutex_unlock(&mutex);
pthread_mutex_destroy(&mutex);
}

number_of_threads在使用互斥量和条件变量的push和pop函数中增加和减少。

如何跟踪代码以找出问题发生的位置和原因。我有许多互斥锁和函数,因此要找到问题并非易事。任何提示都会有所帮助。

预先感谢

0 个答案:

没有答案