pthread_cond_wait没有做我期待的事情

时间:2013-04-10 20:33:31

标签: c++ pthreads posix

我正在尝试以我认为应该使用的方式使用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;
}

1 个答案:

答案 0 :(得分:2)

使用g ++的