我有一些包含许多函数和线程以及许多不同互斥锁的代码。有时代码运行良好,有时我得到这些错误之一
1) “/usr/include/boost/thread/pthread/mutex.hpp:111: boost::mutex::~mutex(): Assertion '!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);
}
使用互斥锁和条件变量的 push 和 pop 函数的number_of_threads
增加和减少。
如何跟踪代码以找出问题发生的位置和原因。我有很多互斥锁和函数,所以要找到问题并不容易。任何提示都会有所帮助。
提前致谢