208  5.    

//  5.4. -  
//               

//. . .
float Number;

pthread_t ThreadA,ThreadB ;

pthread_mutex_t Mutex,EventMutex;

pthread_cond_t Event;

void *workerl(void *X)
{

?or(int Count = l;Count < 100;Count++){
pthread_mutex_lock(&Mutex) ;

Number++;

pthread_mutex_unlock(&Mutex) ;

cout  "workeri:   "  Number  endl;

if(Number == 50){

pthread_cond_signal(&Event) ;

}
}
cout  "  workeri ."  endl;

return(0) ;

}

void *worker2(void *X)
(

pthread_mutex_lock(&EventMutex) ;

pthread_cond_wait(&Event,&EventMutex) ;

pthread_mutex_unlock(&EventMutex) ;

for(int Count = 1,-Count < 50;Count++){
pthread_mutex_lock(&Mutex) ;

Number = Number + 20;

pthread_mutex_unlock(&Mutex);

cout  "worker2:   "  Number  endl;

}
cout  "  worker2 ."  endl;

return)0) ;

}

int main(int argc, char *argv[])
{

pthread_mutex_init(&Mutex,NULL) ;

pthread_mutex_init(&EventMutex,NULL) ;

pthread_cond_init(&Event,NULL) ;

pthread_create(&ThreadA,NULL,workeri,NULL) ;

pthread_create(&ThreadB,NULL,worker2,NULL) ;

//. . .

return (0) ;

}

  5.4    - . 
ThreadA      ,     ThreadB. 
  Number   50,  ThreadA  
  ThreadB.        .
 ThreadB       ,     
 ThreadA.  ThreadB   EventMutex   
 Event.  Mutex      -
    Number.    
         .