我正在尝试以我认为应该使用的方式使用 pthread_cond_wait。我在一个方法中使用它,即等待某些事情发生变化,当它发生变化时,它将调用另一个方法来获取数据。如下所示:
void waitForSomething(const std::string& _str) {
//lock my mutex here
while (!ifStringInSomeCollection(_str)) {
std::cout << "waiting.." << std::endl;
pthread_cond_wait(&_condMutex, &_myMutex);
}
//unlock my mutex here
//this method also acquires my mutex lock
std::cout << getData(_str) << std::endl;
}
现在,在我的另一种打破条件并广播/发出等待条件的信号的方法中,我首先在广播/发出信号之前解锁互斥锁 - 所以这不应该成为问题。
但即使没有,当前发生的情况是,它会不断检查 while 循环中的条件而不是 pthread_cond_wait - 实际上是等待。我已经坚持了一段时间,任何想法都将不胜感激。谢谢!
===================
经过讨论,我编写了以下内容进行测试,以获得在测试情况下等待的条件。我仍然收到重复的“锁定”消息。我一定做错了什么?http://ideone.com/eVuKEC
#include<pthread.h>
#include <iostream>
pthread_mutex_t mutex;
pthread_cond_t cond;
bool something;
void test() {
pthread_mutex_lock(&mutex);
while(!something) {
std::cout <<"locked" << std::endl;
pthread_cond_wait(&cond,&mutex);
}
pthread_mutex_unlock(&mutex);
}
int main(){
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
something=false;
test();
return 0;
}