5.3.    209

  -     5.5.

//  5.5. -  
//               

//. . .

float Number;

pthread_t ThreadA,ThreadB;

pthread_mutex_t Mutex,EventMutex;

pthread_cond_t Event;

void *workerl(void *X)
{

for(int Count = l;Count < 10;Count++){
pthread_mutex_lock(&Mutex) ;

Number++;

pthread_mutex_unlock(&Mutex) ;

cout  "workeri:   "  Number  endl;

}
pthread_mutex_lock(&EventMutex) ;

cout  " workeri   . "
 endl ;

pthread_cond_wait(&Event,&EventMutex) ;

pthread_mutex_unlock(&EventMutex) ;

return(0) ;

}

void *worker2(void *X)
{

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

Nuinber = Number * 2 ;

pthread_mutex_unlock(&Mutex) ;

cout  "worker2:   "  Number  endl;

}
pthread_cond_signal(&Event) ;

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.5  ThreadA      ,   -
  ThreadB.  ThreadA    10 , a ThreadB
100.  ThreadA      ThreadB,  
   ,   ThreadB     .

-  -     .
       .