操作系统——并发和并行,并发带来的问题,同步和互斥(简单理解)
操作系统——并发和并行,并发带来的问题,同步和互斥
并发和并行
- 什么是并发?
在一段时间内,我一会去吃口饭,一去扫个地,一会去洗个碗,,进程的并发执行也是类似的,我一会执行进程A,一会执行进程B,一会执行进程C,进程交替执行,这就是并发,那在宏观上看A,B,C在同时执行。
- 什么是并行?
在一段时间内,我吃饭、扫地、洗碗一起做,进程重叠执行,这就是并行,在微观上看A,B,C确实在同时执行。
一张图就可以很好区分二者:
并发带来的问题
- 那并发会带来什么问题呢?
A和B有个资源是共用的,假设进程A和B交替执行,那可能就会导致一些错误
举个例子:机票问题
T1,T2两个旅客购票流程都是先获取机票剩余量,如果票量足够就购得一张票,然后机票剩余量-1,否则输出票已售完,具体程序如下:
如果这两个进程顺序执行,T1购票完毕后T2再去购票,并不会出现任何问题
但是如果T1、T2并发执行,交替执行T1和T2中的语句,可能出现如下交叉情况:
假如机票剩余量的初始值为2,那Aj=2
T1:X1=Aj; //执行T1的语句,将机票剩余量Aj赋值给X1,X1=2
T2:X2=Aj; //执行T2的语句,将机票剩余量Aj赋值给X2,X2=2
T2:X2–;Aj=X2;{输出一张票}; //T2旅客购得一张票,机票剩余量-1,Aj=1
T1:X1–;Aj=X1;{输出一张票}; //T1旅客购得一张票,机票剩余量-1,Aj=1
问题出现了,按道理两位旅客购完票之后,机票剩余量Aj应该是0才对,可是现在确是1。这就是并发可能带来的结果错误。
互斥和同步
如果多个进程在争夺一块蛋糕,那它们就是竞争关系,这块蛋糕就被称为临界资源,而使用这个临界资源的那一部分程序就被称为临界区
那什么是互斥和同步?
- 互斥:一次只允许一个进程吃蛋糕。
- 同步:各进程的工作的推进遵循一个先后顺序,比如先要做蛋糕,才能吃蛋糕
那进程之间的关系也通过进程互斥和同步梳理出来
- 互斥就是竞争关系
- 同步就是协作关系