临界区块(Critical section)指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源有无法同时被多个线程访问的特性。(不是字面意思的一个区域,是程序片段的集合)
1. 为了完成一件事,汇编有时会分成多条指令进行执行。
2.进程有一定的时间片,用完了自己的时间片就会被切换下去。
这就带来了问题:如果没有执行完,就被切换下CPU,会造成意想不到的问题。
处理方法:
加锁
使用原语操作,不允许被中断(即使用完了时间片,也不下来;忽视抢占)
为什么需要同步?
1. 进程间的时序关系。但是初始状态下,任意进程都可能上CPU,它们是无序的
错题
3。
以下是解决进程互斥进入临界区的一种解法。
P:
… …
pturn = true;
while (qturn) ;
临界区操作
pturn = false;
… …
Q:
… …
qturn = true;
while (pturn) ;
临界区操作
qturn = false;
… …
其中,pturn、qturn的初值为false
如果P、Q两个进程同时想进入临界区,那么会发生下面哪一种情形?
条件并不是代码中写的那样,应该是:
所以答案是两者都不能进入