读写锁:(自旋锁)

读者与读者: 互斥,同步

写者与写者:互斥


写者一般优先

  1 #include<stdio.h>
  2 #include<pthread.h>
  3 
  4 #include<stdlib.h>
  5 int val;
  6 pthread_rwlock_t rw_lock;
  7 void* read(void* arg)
  8 {
  9     while(1)
 10     {
 11      pthread_rwlock_rdlock(&rw_lock);
 12      printf("reader: tid:%ld,val:%d\n",pthread_self(),val);
 13      pthread_rwlock_unlock(&rw_lock);
 14      sleep(1);
 15     }
 16 }
 17 void* write(void* arg)
 18 {
 19     static int i=0;
 20     while(1)
 21     {
 22      pthread_rwlock_wrlock(&rw_lock);
 23      val=i++;
 24      printf("writer: tid:%ld,val:%d\n",pthread_self(),val);
 25      pthread_rwlock_unlock(&rw_lock);
 26      sleep(1);
 27     }
 28 
 29 }
 30 int main()
 31 {
 32   pthread_rwlock_init(&rw_lock,NULL);
 33   pthread_t reader1,reader2,writer1;
 34  pthread_create(&writer1,NULL,write,NULL);
 35  pthread_create(&reader1,NULL,read,NULL);
 36  pthread_create(&reader2,NULL,read,NULL);
 37 
 38  pthread_join(writer1,NULL);
 39 
 40 
 41  pthread_join(reader1,NULL);
 42  pthread_join(reader2,NULL);
 43 
 44   pthread_rwlock_destroy(&rw_lock);
 45 
 46 
 47    return 0;
 48 }
 
 结果:
 
[admin@localhost RW_LOCK]$ ./rw_lock
reader: tid:-1237779600,val:0
reader: tid:-1227289744,val:0
writer: tid:-1216799888,val:0
reader: tid:-1237779600,val:0
reader: tid:-1227289744,val:0
writer: tid:-1216799888,val:1
reader: tid:-1237779600,val:1
reader: tid:-1227289744,val:1
writer: tid:-1216799888,val:2
reader: tid:-1237779600,val:2
reader: tid:-1227289744,val:2
writer: tid:-1216799888,val:3
reader: tid:-1237779600,val:3
reader: tid:-1227289744,val:3
writer: tid:-1216799888,val:4
reader: tid:-1237779600,val:4
reader: tid:-1227289744,val:4
writer: tid:-1216799888,val:5
^C