我的程序似乎有一个死锁问题。pthread_cond_wait()不释放互斥锁的可能原因?
基本上我有一个类,它看起来像这样:
class Foo {
public:
Foo();
void bar();
private:
void monitor();
bool condition_;
pthread_t monitor_;
pthread_mutex_t mutex_;
pthread_cond_t cv_;
};
在Foo
的构造,我在一个单独的线程(即monitor_
)调用monitor()
。这monitor()
函数执行以下操作:
pthread_mutex_lock(&mutex_);
while (true) {
while (!condition_) {
pthread_cond_wait(&cv_, &mutex_);
}
// do something
// and then setting condition_ to false
condition_ = false;
}
pthread_mutex_unlock(&mutex_);
的bar()
功能是Foo
唯一的公共接口(不包括构造函数和析构函数)。它还需要获取它的执行中的互斥量。我的症状是bar()
永远无法获得mutex_
。它看起来像pthread_cond_wait()
不会像它应该那样释放互斥锁。如果我禁用显示器线程(因此没有赛车状况),那么bar()
可以运行到完成没有任何问题。
当然,上面的代码是我的真实代码的简化版本。其实我认为在这段代码中没有逻辑错误,我正确使用pthread。我怀疑是否有任何其他原因造成这种僵局。任何人都可以提供一个线索吗?谢谢!
顺便说一句,'mutex_'和'cv_'已经正确地初始化了,在构造函数中属性都是NULL。 –
使用pthreads没有什么明显的错误。你能告诉我们构造函数吗? –