204  5.    

void *consumerl(void *X)
{

pthread_rwlock_rdlock(&RWLock) ;

//  .

pthread_rwlock_unlock(&RWLock) ;

return(0) ;

}

void *consumer2(void *X)
{

pthread_rwlock_rdlock(&RWLock) ;

//  .

pthread_rwlock_unlock(&RWLock) ;

return(0) ;

}

int main(void)
{

pthread_rwlock_init(&RWLock,NULL) ;

//   .

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

pthread_create(&ThreadB,NULL,consumeri.NULL) ;

pthread_create(&ThreadC,NULL,producer2,NULL) ;

pthread_create(&ThreadD,NULL,consumer2,NULL) ;

//. . .

return(0) ;

}

  5.3   .  , ThreadA  ThreadC, -
  ,    (ThreadB  ThreadD)  . 
   ,     -
- RWLock.  ThreadB  ThreadD     
   ,   ,   ThreadA
 ThreadC     .  ThreadA  ThreadC 
      .   
  5.3   . 5.6.

 5.6.      5.3

                                      D
( )  ( ) ( }  ( }

                                           
                                            
                                             
                                             
                                            