pthread条件循环

Rav*_*avi 2 c multithreading pthreads

我见过使用pthread_cond_wait的典型模式是:

pthread_mutex_lock(&lock);
  while (!test)
    pthread_cond_wait(&condition, &lock);
pthread_mutex_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)

为什么不能使用if语句而不是while循环.

pthread_mutex_lock(&lock);
  if (!test)
    pthread_cond_wait(&condition, &lock);
pthread_mutex_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 9

http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_timedwait.html

使用条件变量时,总会有一个布尔谓词,涉及与每个条件等待关联的共享变量,如果线程应该继续,则为真.可能会发生pthread_cond_timedwait()或pthread_cond_wait()函数的虚假唤醒.由于从pthread_cond_timedwait()或pthread_cond_wait()返回并不意味着有关此谓词的值的任何内容,因此应在返回时重新评估谓词.

根据whilePOSIX的要求,循环是一种非常标准的重新评估谓词的方法.