驱动开发系列09 - 驱动程序中的并发编程

目录

一:概述

二:并发问题 - 竞争(竞态)条件(race conditions)

三:并发管理

四:信号量与互斥        

        Linux 信号量的实现

        读者/写者信号量

五:完成量( Completions)

六:自旋锁(Spinlocks)

        自旋锁API介绍

        自旋锁和原子上下文

        更多自旋锁API

        读者/写者 自旋锁

七:锁的陷阱

        陷阱1 - 模糊的锁使用规则

        陷阱2 - 未遵循锁排序规则

        陷阱3 - 细粒度锁与粗粒度锁

八:锁的代替方案

        使用无锁(Lock-Free)算法

        使用原子变量


一:概述

        并发编程是驱动编程中的核心问题之一。与并发相关的bug最容易产生,也很难找到。即使是专业的Linux内核程序员,有时也会产生与并发相关的bug。现代Linux操作系统,为了满足现代硬件和应用程序需求,其Linux内核已经发展到可以同时处理很多事情的程度,这一进化使得性能和可扩展性都得到了极大的提升。然而,这也大大增加了驱动编程的复杂性。所以设备驱动开发人员必须从一开始就要开始考虑并发问题,并且必须充分了解内核提供的并发编程接口。

二:并发问题 - 竞争(竞态)条件(race conditions)

        为了讲述竞争条件(race conditions), 先让我们快速浏览下面的代码片段。这段代码逻辑是:判断内存是否已经分配完毕,如果未分配则分配内存,如果分配失败则返回。代码如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑不溜秋的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值