没有while循环的pthread_cond_wait

Aqu*_*irl 3 multithreading mutex pthreads condition-variable

global variable 'temp';

**threadA**   
    -pthread_mutex_lock-  
            if (temp == 'x')  
                    -pthread_cond_wait-
                    do this     
        -pthread_mutex_unlock-      

**threadB**  
    -pthread_mutex_lock-  
            if (someCondition == true)            
                        temp = 'x'  
                -pthread_cond_signal-  
    -pthread_mutex_unlock-
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我可能没有任何循环,我只有一个if条件.所以,我希望当temp =='x'时,那么threadA应该这样做/ this.

  • 在处理时,循环是强制性的pthread_cond_wait吗?
  • 如果我们不需要循环,编写代码的另一种方法是什么?
  • 这是编写代码的正确方法吗?

cme*_*erw 7

循环是强制性的,因为根据http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html:

可能会发生pthread_cond_timedwait()或pthread_cond_wait()函数的虚假唤醒.由于从pthread_cond_timedwait()或pthread_cond_wait()返回并不意味着有关此谓词的值的任何内容,因此应在返回时重新评估谓词.

  • 是的,这就是标准所说的 - 一个特定的实现可能会选择实现更严格的语义. (2认同)