信号量



【设备驱动程序中的并发控制】

在驱动程序中,当多个线程同时访问像全局变量这样的共享资源时,会引发竞态,需要对共享资源进行控制。Linux内核中解决并发控制的最常用方法是信号量与自旋锁。信号量是一种睡眠锁,如果有一个任务试图获得一个已经被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠,这时候处理器获得自由去执行其他代码。当持有信号量的进程释放信号量之后,在等待队列中的一个任务将被唤醒,从而获得这个信号量;信号量适合于保持时间较长的情况,只能在进程上下文来使用,不能再中断上下文来使用。自旋锁是专为多处理器并发控制而引入的一种锁,它在内核中大量应用于中断处理部分,但对于大多只有单处理器的嵌入式系统来说,中断处理中的并发控制可采用关闭中断的方式,不需要自旋锁。

Linux内核在include/asm中定义了一个semaphore结构体,它就是信号量。信号量可以定义如下:

Struct semaphore sem;   //定义一个名为sem的信号量。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值