并发与竞争
文章平均质量分 83
liefyuan
一招鲜吃变天!
展开
-
并发与竞争(五)互斥锁
同一个资源同一个时间只有一个访问者在进行访问,其他的访问者访问结束以后才可以访问这个资源。这就是互斥。 互斥锁和信号量值为1的情况很类似,但是互斥锁更简洁,更高效。不过在使用中需要注意的事项也就更多。 全部代码 led.c 以上代码编译成.ko文件app.c 以上代码编译成app.armelf执行文件测试:原创 2022-12-07 18:32:56 · 615 阅读 · 0 评论 -
并发与竞争(四)信号量
两个特点: 自旋锁是通过“原地等待”的方式来处理并发与竞争的,所以被保护的临界区不能太长,以免造成对CPU资源的浪费。但是有些情况我们必不可免的要长时间对一些资源进行保护。这时候就可以使用信号量了。什么是信号量呢? 举个例子,现在有一个电话亭,里面只有一个公共电话。某天A去打电话,恰好过了一会B也来了要打电话。但是此时A在打电话,所以B就只能等待A打完电话才可以打。如果是自旋锁的,B就要一直等待着A打完。但是A的事情很重要,需要打很长时间电话。这时候自旋锁就不合适了。那A是不是就可以告诉B,你先去休息一会原创 2022-12-07 18:05:19 · 518 阅读 · 0 评论 -
并发与竞争(二)原子操作
原子操作中的“原子”指的是化学反应中的最小微粒。在Linux中用原子来形容一个操作或者一个函数是最小的执行单位,是不可以被打断的。所以原子操作指的是该操作在执行完之前不会被任何事物打断。原子操作一般用于整形变量或者位的保护。比如,定义一个变量a,如果程序A正在给变量a赋值,此时程序B也要来操作变量a,这时候就发生了并发与竞争。程序A的操作就有可能被程序B打断。如果我们使用原子操作对变量a进行保护,就可以避免这种问题。Linux中定义了一个叫做和的结构体来描述原子变量,其中是用于32位系统,是用于64位系统。原创 2022-12-07 00:05:19 · 1174 阅读 · 0 评论 -
并发与竞争(一)概念
三个概念:下面这张图描述的是单核CPU的“并发”这个概念: 并发会造成多个程序同时访问一个共享资源,这时候由并发同时访问一个共享资源而产生的问题就是竞争。Linux是一个多任务的操作系统,并发和竞争在Linux中非常的常见。所以在编写Linux驱动的过程中就要考虑并发与竞争。否则在访问共享资源的时候容易出问题,而这些问题往往不容易排查,很难定位。这里讨论的是内核空间中的并发,用户空间中的并发不讨论,现在有两个相同的驱动程序A和B,这两个驱动程序并发执行,并且它们都要修改变量c。情况一是理想情况,但是我们根本原创 2022-12-06 21:30:49 · 211 阅读 · 0 评论