我正在尝试在 while 循环条件下检查类型为 pthread_cond_t 的变量的值。
变量在节点结构中定义,格式如下:
pthread_cond_t cv;
当我尝试使用 !=
或 == NULL
检查 this 的值时,我收到无法完成的错误。这是我尝试检查时的样子:
while(!node->cv) {
其中 node
是指向包含 cv 的结构的指针。
我收到错误“一元感叹号的参数类型错误,因为我猜它不是 bool 值。有没有办法检查这个条件变量是否有值?
最佳答案
条件变量没有值。它们是您等待和发出信号的抽象对象,并且抽象地与 bool 结果表达式(谓词)相关联,这些表达式涉及程序中受关联互斥锁保护的其他变量。所以不是:
while (!node->cv)
你这样做:
while (some_predicate(node))
pthread_cond_wait(&node->cv, &node->mtx);
这必须在互斥锁已经锁定的情况下完成。
关于检查 pthread_cond_t 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262140/