《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(7)——读写信号量

本文介绍了Linux驱动程序中读写信号量的概念和使用方法,包括初始化、读写信号量的获取与释放。读写信号量允许多个读操作并发,但限制写操作的并发,有效提高了程序执行效率。通过示例展示了如何使用读写信号量保护临界区,确保并发访问的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读写信号量概述

读写信号量和信号量的关系与读写自旋锁和自旋锁的关系类似。读信号量和写信号量是互斥的,但允许N个读执行单元同事访问共享资源(同事获取读信号量),而最多允许一个写进程获取写信号量。因此,读写信号量相对于信号量更宽松,对于读多写少的情况会明显提高程序的执行效率。

读写信号量的使用方法

(1) 定义和初始化读写信号量
struct rw_semaphore rw_sem; /* 定义读写信号量 */
int_rwsem(struct rw_semaphore *sem); /* 初始化读写信号量 */

init_rwsem实际上是一个宏,用来初始化读写信号量,需要传递一个**rw_semaphore结构体的指针。

(2) 获取读信号量
void down_read(struct rw_semaphore *sem);
int down_read_trylock(struct rw_semaphore *sem);

down_read 函数用于获取读信号量,如果无法获取读信号量则会进入休眠。
down_read_trylock 函数不管是否获取到读信号量都会立刻返回。如果成功获取到读信号量则返回1,否则返回0.

(2) 释放读信号量
void up_read(struct rw_semaphore *sem);
(3) 获取写信号量
void down_write(struct rw_semaphore *sem);
void down_write_trylock(struct rw_semaphore *sem);

down_write 函数用于获取写信号量,如果无法获取写信号量则会进入休眠。
down_write_trylock 函数不管是否获取到写信号量都会立刻返回。如果成功获取到写信号量则返回1,否则返回0.

(4) 释放写信号量
void up_write(struct rw_semaphore *sem);
读写信号量的一般使用方法

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值