Linux:线程同步之读写锁(读写锁的本质、读写锁的作用、如何使用读写锁、读写锁的特征)

1、读写锁

(1)What(什么是读写锁)

与互斥锁类似,读写锁的本质也是一个类对象,读锁对象允许读线程对临界区的并行访问,而写线程对临界区只能互斥访问(换言之,读写锁是互斥锁的升级版)

(2)Why(读写锁的作用)

在保护共享资源一致性的基础上提高了并发读的性能(换言之,在实现线程同步的基础上提高了并发读的性能)

(3)How(如何使用读写锁)

step01:定义读写锁及类型

本质就是创建一个读写锁对象,并指定锁的类型是读锁还是写锁

pthread_rwlock_t rwlock;

step02:初始化读写锁对象

本质就是给读写锁对象赋初始值

#include <pthread.h>
int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr = NULL);
  • 参数rwlock:要初始化的读写锁对象
  • 参数attr:指定读写锁的属性,通常传递 NULL 以使用默认属性
  • 返回值:0表示初始化成功

step03:写锁锁定临界区

本质就是调用函数修改读写锁对象的状态,写锁只允许线程互斥访问临界区,当获取失败时,对应的线程会阻塞在这个读写锁对象上

#include <pthread.h>
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
  • 参数rwlock:被上写锁的读写锁对象
  • 返回值:0表示上写锁成功

step04:读锁锁定临界区

本质就是调用函数修改读写锁对象的状态,读锁允许读线程共同访问临界区,当该锁处于写状态时,会导致上读锁失败,线程阻塞

#include <pthread.h>

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
  • 参数rwlock:被上读锁的读写锁对象
  • 返回值:0表示上读锁成功

step05:解锁

本质还是调用函数修改读写锁的状态,解锁之后,该读写锁对象对临界区的管理将会解除

#include <pthread.h>
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
  • 参数rwlock:将要被释放的读写锁对象
  • 返回值:0表示释放读写锁成功

step06:销毁读写锁对象

本质就是释放读写锁占有的内存,以归还给操作系统

#include <pthread.h>
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
  • 参数rwlock:被销毁的读写锁对象
  • 返回值:0表示销毁成功

(4)读写锁的特征

  • 如果是读锁锁定了临界区,那么可以并行读取临界区,因为读锁对读是共享的
  • 如果是写锁锁定了临界区,那么只能串行访问临界区,因为写锁对读和写都是独占的
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值