检查 pthread_cond_t 的值

Aus*_*tin 0 c multithreading synchronization pthreads

我试图在 while 循环条件下检查 pthread_cond_t 类型的变量的值。

该变量在节点结构中定义,形式如下:

pthread_cond_t cv;
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此方法检查其值时,!=或者== NULL出现无法完成此操作的错误。这是我尝试检查时的样子:

while(!node->cv) {
Run Code Online (Sandbox Code Playgroud)

其中node是指向包含 cv 的结构的指针。

我收到错误“一元感叹号的参数类型错误,因为我猜它不是布尔值。有没有办法检查这个条件变量是否有值?

R..*_*R.. 5

条件变量没有值。它们是您等待和发出信号的抽象对象,并且与涉及程序中受关联互斥体保护的其他变量的布尔结果表达式(谓词)抽象关联所以而不是:

while (!node->cv)
Run Code Online (Sandbox Code Playgroud)

你做:

while (some_predicate(node))
    pthread_cond_wait(&node->cv, &node->mtx);
Run Code Online (Sandbox Code Playgroud)

这必须在互斥体已经锁定的情况下完成。