并发与竞争

简介: 并发与竞争

什么是并发与竞争

并发会造成多个程序同时访问一个共享资源,这时候由并发同时访问一个共享资源而产生的问题就是竞争。比如A和B要打电话,但是公共电话只有一部。A和B要打电话就是并行,谁先打电话就是竞争,所以电话就是共享资源。

Linux是一个多任务的操作系统,并发和竞争在Linux中常的常见。所以在编写Linux驱动的过程中就要考虑并发与竞争。否则在访问共享资源的时候容易出问题,而这些问题往往小容易排查,很难定位。

如果不处理并发后果

这里我们讨论的是内核空间中的并发,用户空间中的并发不讨论,现在有俩个相同的驱动程序A和B,这俩个驱动程序并发执行,并且他们都要修改变量c。

情况1:

程序A先运行,程序A运行完在运行程序B,这种情况是理想情况。程序A和程序B完美运行,没有错误。

情况2:

程序A运行了一半,内核调度让程序B执行,程序B执行完以后在回来来执行程序A。但是程序A执行完以后,程序B是不是就相当于什么也没有做呢,变量c的值是程序A的值。

情况1是理想情况,但是我们根本无法预料到程序A和程序B到底是怎么运行的。如果不对共享资源进行保护。轻则程序白白运行一次,重则系统崩溃。

Linux造成并发情况

主要有以下几种情况:

  • (1)中断程序并发访问。中断是可以随时产生的,一旦产生中断,就会放下手头的工作,去执行中断中的任务,如果在执行中断中的任务的时候修改了共享资源,就会产生刚才我们讲的问题。
  • (2)抢占式并发访问。在Linux内核2.6版本以后,Linux内核支持了抢占,在支持抢占的情况下,正在执行的进程随时都有可能被抢占。
  • (3)多处理器(SMP)并发访问。多核处理器之间存在核间并发访问。

发生并发要保护什么

进程(运行起来的程序就是进程)并发访问共享资源是不安全的,如果俩个进程同时访问空间资源,就是发生竞争。所以我们要保护共享资源,什么是共享资源呢?放在现实生活中,共享资源可以是在第一张幻灯片中提到的公共电话,也可以是我们日常生活中的共享单车,共享充电宝等。这些都是共享资源。

放在代码中,共享资源就是某个整形的全局变量,或者驱动中的设番结构体。当然!其他的数据也可能是共享数据,这个就要根据实际的驱动程序来实际分析了。

目录
相关文章
|
4月前
|
存储 缓存 otter
一个无竞争的缓存
一个无竞争的缓存
49 1
【并发技术03】传统线程互斥技术—synchronized
【并发技术03】传统线程互斥技术—synchronized
|
存储 缓存 Java
【并发技术12】线程锁技术的使用(二)
【并发技术12】线程锁技术的使用
|
设计模式
【并发技术04】线程技术之死锁问题
【并发技术04】线程技术之死锁问题
【并发技术08】多个线程间共享数据
【并发技术08】多个线程间共享数据
|
安全 数据库
【并发技术06】线程范围内共享数据
【并发技术06】线程范围内共享数据
|
存储 缓存 并行计算
使用多线程编程来实现并发时,需要考虑并发所带来的哪些风险呢?
分布式系统的一个重要特征就是计算能力是可以并发或者并行的。 在分布式系统中,往往会将一个大任务进行分解,而后下发给不同的节点去计算,从而节省整个任务的计算时间。
|
存储 Java 程序员
【多线程与高并发】- synchronized锁的认知
synchronized 是 Java 语言的一个关键字,它允许多个线程同时访问共享的资源,以避免多线程编程中的竞争条件和死锁问题。
132 0
【多线程与高并发】- synchronized锁的认知
|
存储 缓存 安全
并发之道:三大并发问题与JMM何干?
并发之道:三大并发问题与JMM何干?
120 0
并发之道:三大并发问题与JMM何干?

热门文章

最新文章

相关实验场景

更多