pthread_cond_wait没有做我所期望的

pthread_cond_wait isn't doing what I'm expecting

本文关键字:期望 cond wait pthread      更新时间:2023-10-16

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

使用-pthread选项编译g++