我有一些具有许多功能和线程以及许多不同互斥量的代码。有时候代码运行良好,有时候我会遇到这些错误之一
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函数中增加和减少。
如何跟踪代码以找出问题发生的位置和原因。我有许多互斥锁和函数,因此要找到问题并非易事。任何提示都会有所帮助。
预先感谢