3
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-

就我而言,我可能没有任何循环,我只有一个 if 条件。所以,我希望当 temp == 'x' 时,threadA 应该这样做/这个。

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

1 回答 1

8

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

可能会发生来自 pthread_cond_timedwait() 或 pthread_cond_wait() 函数的虚假唤醒。由于 pthread_cond_timedwait() 或 pthread_cond_wait() 的返回并不意味着该谓词的任何值,因此应在此类返回时重新评估谓词。

于 2012-05-15T06:45:55.173 回答