我正在尝试以我认为应该使用的方式使用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;
}
答案 0 :(得分:2)
使用g ++的