gpt4 book ai didi

c++ - pthread_cond_wait 没有按照我的预期进行

转载 作者:行者123 更新时间:2023-11-28 03:19:16 27 4
gpt4 key购买 nike

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

最佳答案

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

关于c++ - pthread_cond_wait 没有按照我的预期进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15935855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com