读写锁实际是实现保护共享资源而提出一种锁机制。
它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。
特性:
#include <pthread.h> #include <stdio.h> pthread_rwlock_t rwlock; pthread_t t1, t2, t3; int shared = 0; void* run1(void *arg) { while(1) { pthread_rwlock_rdlock(&rwlock); //加读锁 printf("run1 read %d\n", shared); pthread_rwlock_unlock(&rwlock); } } void* run2(void *arg) { while(1) { pthread_rwlock_rdlock(&rwlock);//加读锁 printf("run2 read %d\n", shared); pthread_rwlock_unlock(&rwlock); } } void* run3(void *arg) { while(1) { pthread_rwlock_wrlock(&rwlock); printf("写加锁,读加锁被阻塞\n"); sleep(2); printf("释放写锁\n"); pthread_rwlock_unlock(&rwlock); } } main() { pthread_rwlock_init(&rwlock, 0); pthread_create(&t1, 0, run1, 0); pthread_create(&t2, 0, run2, 0); pthread_create(&t3, 0, run3, 0); while(1); }
原文:http://blog.csdn.net/aspnet_lyc/article/details/19978211