读写自旋锁

自旋锁不关心临界区执行的是什么操作,不管读写都同等对待,即便多个执行单元同时读取临界资源也会被锁住。
实际上,对共享资源的并发访问时,多个执行单元同时读时没有问题的。读写自旋锁可允许读并发。
读写自旋锁是一种比自旋锁粒度更小的锁机制,在写的时候,只能最多有一个写进程,但是在读操作方面,可以允许同时有多个
读执行单元。但是读和写也不能同时进行。

定义读写锁:

rwlock_t rwlock;

读写锁初始化:

rwlock_init(&rwlock);

读锁定:

void read_lock(rwlock_t *lock);
void read_lock_irqsave(rwlock_t *lock, unsigned long flags);
void read_lock_irq(rwlock_t *lock);
void read_lock_bh(rwlock_t *lock);

读解锁:

void read_unlock(rwlock_t *lock);
void read_unlock_irqstore(rwlock_t *lock, unsigned long flags);
void read_unlock_irq(rwlock_t *lock);
void read_unlock_bh(rwlock_t *lock);

在对共享资源进行读取之前,应该先调用都锁定函数,完成之后再调用都解锁函数。
read_lock_irqsave(),read_lock_irq()以及read_lock_bh()分别是read_lock()与local_irq_save(),local_irq_disble以及
local_bh_enable()的结合,读解锁函数也是同样的。
写锁定:

void write_lock(rwlock_t *lock);
void write_lock_irqsave(rwlock_t *lock, unsigned long flags);
void write_lock_irq(rwlock_t *lock);
void write_lock_bh(rwlock_t *lock);
void write_trylock(rwlock_t *lock);

写解锁:

void write_unlock(rwlock_t *lock);
void write_unlock_irqrestore(rwlock_t *lock, unsigned long flags);
void write_unlock_irq(rwlock_t *lock);
void write_unlock_bh(rwlock_t *lock);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值