pthread_cond_wait没有做我所期望的
pthread_cond_wait isn't doing what I'm expecting
我正试图以我认为应该使用的方式使用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++
相关文章:
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- 一元*运算符的操作数是否期望一个 prvalue
- 什么 /可以/ 你从一个函数返回. 并期望它在到达时还活着?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 根据实例化点期望不同的类型
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- C++ 期望":"(冒号)的构造函数
- 将 std::vector::d ata 传递给函数期望类型**(双指针)
- 期望在奇怪的地方有一个";"
- 如何期望通过使用Google Test(Mock)以特定频率调用函数
- 如何测试序列生成器将生成期望的项目
- 提升精神 x3 错误处理程序与期望
- C++中的后缀不像我期望的那样表现
- MSVC++ 17 std::copy 期望自定义迭代器的"operator -"
- 如何区分在同一行上创建的 gmock 期望
- 为什么我的 Hippomock 期望在使用多重继承时失败
- std::设置扣除指南不像我期望的那样工作
- STL vector.insert 方法期望_InputIterator作为参数
- 我可以期望某些 STL 函数实现是可自动矢量化的吗?
- 为什么我可以将 std::map 的键传递给一个期望非常量的函数?