linux驱动开发笔记_信号量

信号量概念

信号量(Semaphore)是操作系统中最典型的用于同步互斥的手段,信号量的值可以是0、1或者n

①如果信号量S的值大于零,该进程继续执行。P(S)
②如果S的值为零,将该进程置为等待状态,排入信号量的等待队列,直到V操作唤醒之。V(S)

相关函数

1.定义信号量
在这里插入图片描述

2.初始化信号量
在这里插入图片描述

该函数初始化信号量,并设置信号量sem的值为val。

3.获得信号量
在这里插入图片描述
该函数用于获得信号量sem,它会导致睡眠,因此不能在中断上下文中使用

在这里插入图片描述
该函数功能与down类似,不同之处为,因为down ()进入睡眠状态的进程不能被信号打断,但因为down_interruptible ()进入睡眠状态的进程能被信号打断,信号也会导致该函数返回,这时候函数的返回值非0。
在这里插入图片描述
该函数尝试获得信号量sem,如果能够立刻获得,它就获得该信号量并返回0,否则,返回非o值。它不会导致调用者睡眠,可以在中断上下文中使用。

在使用down_interruptible ()获取信号量时,对返回值一般会进行检查,如果非0,通常立即返回-ERESTARTSYs,如:
在这里插入图片描述
4.释放信号量
在这里插入图片描述

信号量作为一种可能的互斥手段,可以用于保护临界区,它的使用方法和自旋锁类似。与自旋锁相同,只有得到信号量的进程才能执行临界区代码。但是,与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等待状态

用作互斥时,信号量的使用方式:
在这里插入图片描述
信号量也可以用于同步,一个进程A执行down ()等待信号量,另外一个进程B执行up ()释放信号量,这样进程A就同步地等待了进程B。其过程类似:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值