进程互斥与同步

1.解释并发与并行,并说明两者关系。

并行:是指两个或者多个事件在同一时刻发生

并发:是指两个或多个事件在同一时间间隔发生。

并行是并发的特例,并发是并行的扩展。

2.进程间有哪几种关系?分别要采取什么策略?

.进程间有竞争、协作两种关系

竞争采用的进程互斥的策略

协作采用的进程同步的策略

3.为什么说进程的互斥也是一种同步?

互斥是某种资源一次只能是一个进程使用,即我在使用时你不能使用;你在使用时我不能使用。是对进程使用资源的次序的一种协调。

4.解释“死锁”与“饥饿”,并说明两者关系。

死锁:死锁是由于进程因争夺资源陷入永远等待的状态,即如果在一个进程集合中的每个进程都在等待只能由该集合中的其他进程才能引发的事件,而无限期僵持的局面

饥饿:一个可运行进程由于其他进程总是优先于它,而被无限期拖延而不能被执行的现象

死锁进程必然处于饥饿状态,但处于饥饿状态的进程未必陷入死锁。

5.什么叫做临界区?如何解决进程对临界资源的访问冲突?

临界区:每个进程中访问临界资源的那段程序。每次只准许一个进程进入临界区,进入后不允许其他进程进入。
临界资源:共享变量所代表的资源
解决:
如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。 任何时候,处于临界区内的进程不可多于一个。
如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。 

6.信号量的物理意义是什么?

 信号量的定义: 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。

7.理解五个哲学家吃面问题,并能盲写出伪代码。

semaphore fork[5];
for (i=0;i<5;i++){
  fork[i]=1;          
}
cobegin
    process philosopher_i(){
      while(true){
         think();
         P(fork[i]);
         P(fork[(i+1)%5]);
             eat();
         V(fork[i]);
         V(fork[(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);

                                  }  }

 
posted @ 2019-04-23 16:15  梁瑞聪  阅读(227)  评论(0)    收藏  举报