1

我有一些包含许多函数和线程以及许多不同互斥锁的代码。有时代码运行良好,有时我得到这些错误之一

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增加和减少。

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

提前致谢

4

0 回答 0