#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
int counter;
pthread_rwlock_t rwlock;
void* tfn_write(void*arg)
{
int i = (int)arg;
int t;
while(1)
{
pthread_rwlock_wrlock(&rwlock);
t = counter;
usleep(1000);
printf("---------write %d:%lu counter = %d ++counter = %d\n",i+1,pthread_self(),t,++counter);
pthread_rwlock_unlock(&rwlock);
usleep(10000);
}
return NULL;
}
void* tfn_read(void*arg)
{
int i = (int)arg;
while(1)
{
pthread_rwlock_rdlock(&rwlock);
printf("---------read %d:%lu counter = %d\n",i+1,pthread_self(),counter);
pthread_rwlock_unlock(&rwlock);
usleep(2000);
}
return NULL;
}
int main(int argc,char* argv[])
{
int i;
pthread_t tid[8];
for(i = 0;i < 3;i++)
{
pthread_create(&tid,NULL,tfn_write,(void*)i);
}
for(i = 0;i < 5;i++)
{
pthread_create(&tid[i+3],NULL,tfn_read,(void*)i);
}
for(i = 0;i < 8;i++)
pthread_join(tid[i],NULL);
pthread_rwlock_destroy(&rwlock);
return 0;
}
读共享,写独占,写锁优先级更高
例如以下运行结果
线程2不可能和线程3一起,因为写锁优先级高,而读锁1和3在他前面
读锁可多线程一起访问如读锁1和3,读锁4 5 2