0

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

1 回答 1

2

使用 -pthread 选项编译到 g++

于 2013-04-10T22:34:42.173 回答