进程互斥与同步
1、解释并发与并行,并说明两者关系。
答:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
关系:并行是并发的特例,并发是并行的扩展
2、进程间有哪几种关系?分别要采取什么策略?
答:进程间有竞争、协作两种关系
竞争采用的进程互斥的策略
协作采用的进程同步的策略
3、为什么说进程的互斥也是一种同步?
答:互斥是某种资源一次只能是一个进程使用,即我在使用时你不能使用;你在使用时我不能使用。是对进程使用资源的次序的一种协调。
4、解释死锁与“饥饿”,并说明两者关系。
答:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他进程才能引发的事件,而无限期僵持的局面称死锁。一个可运行进程由于其他进程总是优先于它,而被无限期拖延而不能被执行的现象称饥饿。死锁进程必然处于饥饿状态,但处于饥饿状态的进程未必陷入死锁。
5、什么叫做临界区?如何解决进程对临界资源的访问冲突?
答:每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,入后不允许其他进程进入。 如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。 任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。 进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。 如果进程不能进入自己的临界区,则应让出 CPU,避免进程出现“忙等”现象。
6、信号量的物理意义是什么?
答:信号量是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。信号量分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。利用信号量和PV操作即可解决并发进程竞争问题,又可解决并发进程协作问题。
7、理解五个哲学家吃面问题,并能盲写出伪代码。
答:五位哲学家吃面问题就是思考过后就会出现饥饿,就要吃面,吃面的前提就是要有左右两边的叉子才能吃,吃完把叉子放回左右两边。
semaphore CZ[5];
for(int i=0;i<5;i++)
CZ[i]=1;
cobegin
process philosopher_i(){
while(true) {
think();
P(CZ[i]);
P(CZ[(i+1)%5]);
eat();
V(CZ[i]);
V(CZ[(i+1)%5]);
}
}
coend
8、一个超市有n个顾客购物,只有一个收银员,试用信号量P、V操作描述顾客进程和收银员之间的关系。写伪代码。
答:
int counter=0; in=0;out=0 ; mutex=1;
counter=counter+in;
process consumer(void){
while(true){
if(counter>0){
P(mutex);
/*临界区*/
V(mutex);
out-=out;
counter=counter-out;
}
else
V(mutex);
} }