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 的结构的指针。
我收到错误“一元感叹号的参数类型错误,因为我猜它不是布尔值。有没有办法检查这个条件变量是否有值?
条件变量没有值。它们是您等待和发出信号的抽象对象,并且与涉及程序中受关联互斥体保护的其他变量的布尔结果表达式(谓词)抽象关联。所以而不是:
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)
这必须在互斥体已经锁定的情况下完成。