Linux多线程开发-线程同步-读写锁

1、读写锁概念

对资源的访问抽象为两种类型,即独占和共享。独占资源具有排他性,例如写操作。共享资源可以同时由多个线程访问,不对该资源执行写操作。针对资源的读和写操作分别加锁,写操作加锁与互斥锁相同,但读操作加锁可以让多个线程同时访问。

优点:互斥锁进入临界区后,未获得锁的线程会阻塞,因此,会降低程序的并发效率。读写锁可以对读操作高效访问,提高资源利用效率,并发性能更高。

POSIX库中用类型pthread_rwlock_t来定义互斥锁,类型在pthreadtypes.h中定义。

2、如何声明一个读写锁

#include <pthread.h>

pthread_rwlock_t rwlock;

3、如何初始化一个读写锁

//静态初始化读写锁
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
 
//动态初始化读写锁
pthread_rwlock_t rwlock;
pthread_rwlock_init(&rwlock,NULL);

静态初始化的读写锁不需要销毁,动态初始化的读写锁需要销毁,销毁函数声明如下:

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

4、如何上锁和解锁

//读模式:上锁方式1,程序进入临界区,如果写模式已经上锁,则阻塞等待,如果读模式上锁,则获得锁进入临界区
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
 
//读模式:上锁方式2,程序进入临界区,如果读写已经上锁,不阻塞,返回EBUSY
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
 
//写模式:上锁方式1,程序进入临界区,如果读写已经上锁,不阻塞,返回EBUSY
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
 
//写模式:上锁方式2,程序进入临界区,如果读写已经上锁,不阻塞,返回EBUSY
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

//解锁,程序退出临界区
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章