当前位置: 技术问答>linux和unix
操作系统的并发性
来源: 互联网 发布时间:2016-04-20
本文导语: 近日看操作系统由以下问题不解:请高手站出来让我等顿悟 题:两个并发执行的程序段完成交通流量的统计,其中“观察者"P1识别通过的车辆数,“报告者”p2定时将观察者的计数值清零,程序实现如下: P1 ...
近日看操作系统由以下问题不解:请高手站出来让我等顿悟
题:两个并发执行的程序段完成交通流量的统计,其中“观察者"P1识别通过的车辆数,“报告者”p2定时将观察者的计数值清零,程序实现如下:
P1 P2
L1:if 有车通过 then L2:Print Count;
Count:Count+1 Count:0;
Goto L1 Goto L2;
结果:可能产生三种执行序列:
(1)Count:Count+1;Print Count; Count:= 0;
(2)Print Count; Coutn:0; Count:=Count+1;
(3)Print COunt; Count:=Count+1;Count:=0;
请问应如何理解这三个结果?
对(3)我的理解是已开始观察者开始计数直到定时时间到,这是开始执行报告者的Print Count;Print Count由于属与输出设备,所以不占CPU,这时观察者继续计数,但是Print Count比计数后少1或者几个数,打印完毕后,Count=0,清零,观察者从零开始计数,但是中间漏打印1或好几个车辆。
对(1),(2)应如何解释? 以上解释是否正确?
并发的具体概念是同一时间间隔内的执行, 是不是结束的时间是相同的,但不是同一时间开始?
[size=24px]请高手领悟吾等愚昧之辈[/size]
题:两个并发执行的程序段完成交通流量的统计,其中“观察者"P1识别通过的车辆数,“报告者”p2定时将观察者的计数值清零,程序实现如下:
P1 P2
L1:if 有车通过 then L2:Print Count;
Count:Count+1 Count:0;
Goto L1 Goto L2;
结果:可能产生三种执行序列:
(1)Count:Count+1;Print Count; Count:= 0;
(2)Print Count; Coutn:0; Count:=Count+1;
(3)Print COunt; Count:=Count+1;Count:=0;
请问应如何理解这三个结果?
对(3)我的理解是已开始观察者开始计数直到定时时间到,这是开始执行报告者的Print Count;Print Count由于属与输出设备,所以不占CPU,这时观察者继续计数,但是Print Count比计数后少1或者几个数,打印完毕后,Count=0,清零,观察者从零开始计数,但是中间漏打印1或好几个车辆。
对(1),(2)应如何解释? 以上解释是否正确?
并发的具体概念是同一时间间隔内的执行, 是不是结束的时间是相同的,但不是同一时间开始?
[size=24px]请高手领悟吾等愚昧之辈[/size]
|
并发并且没有加锁的执行序列:任何可能都有,即P1执行任何指令的后面都可能插入P2的指令执行,反之依然。当然P1,P2自己的指令执行的逻辑顺序是不变的。
(1)P1先执行到Count:Count+1,操作系统任务调度挂起P1,让P2执行,于是P2执行:Print Count;Count:= 0;
(2)P2先执行Print Count;Count:= 0;操作系统任务调度挂起P2,让P1执行,于是P2执行Count:Count+1;
(3)P2先执行Print Count;操作系统任务调度挂起P2,执行P1,于是P1执行:Count:=Count+1;然后操作系统任务调度又挂起P1,执行P2,于是P2执行下一条指令:Count:=0;
并发简单地讲就是:同一时间间隔内有多个任务在"同时"执行;这里的同时只有在多CPU上才是真的同时,在单CPU上,每一个时刻上只有一个任务运行,但是在从宏观的一端时间看,是多个任务在交错执行;
不太可能这几句话就说清除了,建议楼主动手写个多线程或者多进程程序自己体验下应该比较深刻!
good luck!
(1)P1先执行到Count:Count+1,操作系统任务调度挂起P1,让P2执行,于是P2执行:Print Count;Count:= 0;
(2)P2先执行Print Count;Count:= 0;操作系统任务调度挂起P2,让P1执行,于是P2执行Count:Count+1;
(3)P2先执行Print Count;操作系统任务调度挂起P2,执行P1,于是P1执行:Count:=Count+1;然后操作系统任务调度又挂起P1,执行P2,于是P2执行下一条指令:Count:=0;
并发简单地讲就是:同一时间间隔内有多个任务在"同时"执行;这里的同时只有在多CPU上才是真的同时,在单CPU上,每一个时刻上只有一个任务运行,但是在从宏观的一端时间看,是多个任务在交错执行;
不太可能这几句话就说清除了,建议楼主动手写个多线程或者多进程程序自己体验下应该比较深刻!
good luck!