11.3 Linux_线程_读写锁

概述

读写锁的作用:

读写锁是主要为了防止读文件与写文件冲突。如果A线程在读文件,此时B线程写入文件,破坏了原文件的内容,那么A线程读到的数据就是错误的,这就需要读写锁来禁止B线程写入文件。

读写锁特性:

写者使用写锁,只有当读者和写者都不存在时,才可获得锁,否则进入阻塞状态。

读者使用读锁,当写者不存在时,可以获得锁,否则进入阻塞状态。读锁允许多个读者获取

注意:当有读者使用读锁时,此时有写者想要获取写锁,这时写者被阻塞,同时其他读锁请求也会被阻塞。这防止了文件一直被读,无法被写入的情况。

多线程读文件注意点:

不论加不加读写锁,文件流指针都只有一个。线程1读了2行之后,线程2的读取是从第3行开始。因此在每个线程中需要考虑当前流指针的位置。

相关函数

1、初始化

//动态初始化
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,
                        const pthread_rwlockattr_t *restrict attr);
//静态初始化
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;

返回值:成功返回0,失败返回错误码

rwlock:要初始化的读写锁

attr:读写锁属性,NULL代表默认属性

2、销毁

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

返回值:成功返回0,失败返回错误码 

rwlock:要销毁的读写锁

3、上锁与解锁

//读锁,阻塞
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
//读锁,不阻塞
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
//写锁,阻塞
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
//写锁,不阻塞
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
//释放锁
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);

rwlock:要进行操作 的读写锁

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值