【Linux】读写锁

在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢? 有,那就是读写锁。
【Linux】读写锁_第1张图片

读写锁接口 

1.选择读写优先策略

int pthread_rwlockattr_setkind_np(pthread_rwlockattr_t *attr, int pref);

//pref 共有 3 种选择
//1.PTHREAD_RWLOCK_PREFER_READER_NP (默认设置) 读者优先,可能会导致写者饥饿情况

//2.PTHREAD_RWLOCK_PREFER_WRITER_NP 写者优先,目前有 BUG,导致表现行为和
//PTHREAD_RWLOCK_PREFER_READER_NP 一致

//3.PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP 写者优先,但写者不能递归加锁

2.初始化

int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t
*restrict attr);

3.销毁

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

4.加锁和解锁

//共用一把锁,但是读和写加锁用各自的函数,保证优先策略;
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);//读加锁
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);//写加锁

//解锁
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);

你可能感兴趣的:(linux,开发语言)