2012-05-15 3 views
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 без цикла while

  • Является ли цикл обязательным при работе с pthread_cond_wait?
  • Каков другой способ для написания кода, если нам не нужны циклы?
  • Это правильный способ написания кода?

ответ

7

петля является обязательным, поскольку в соответствии с http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html:

Ложные пробуждений от pthread_cond_timedwait() или pthread_cond_wait() может иметь место функции. Поскольку возврат из pthread_cond_timedwait() или pthread_cond_wait() не означает ничего о значении этого предиката, предикат должен быть переоценен при таком возврате.

+1

* «Возможно возникновение ложных пробуждений из функций pthread_cond_timedwait() или pthread_cond_wait()». * Означает ли это, что пробуждения могут возникать без какой-либо причины автоматически? –

+2

Да, это то, что говорит стандарт - конкретная реализация может выбрать более строгую семантику. – cmeerw