操作系统(七) 经典同步问题

一、有限缓冲问题

 

二、读者-作者问题

  一个数据对象可以为多个并发进程所共享,有的进程只需要进行读取(读者),有的进程需要读也需要写(作者)。多个读者同时访问共享数据对象,不会出现什么不利的结果。如果,一个作者和其他一些进程同时访共享对象,则很可能产生混乱。

  为了避免这样的混乱,要求作者对共享对象有完全的访问

 

三、哲学家进餐问题

  典型的同步问题,这是一种需要在多个进程之间分配多个资源而且不会出现死锁和饥饿形式的简单表示。

 

四、临界区域——一个基本的高级同步构造

 

五、管程(monitor)

  管程也是一种高级同步构造,一个管程是由程序员定义的一组操作符来表征的。

  管程构造确保一次只有一个进程能在管程内活动。因此,程序员不需要显示地编写同步限制。(但是现在定义的管程构造还没有强大到能处理一些同步方案的地步)

  管程类型的表示包括一组变量的声明(这些变量的值定义了一个类型实例的状态)和实现对这些类型操作的子程序体和函数体。它的语法如下:

monitor monitor-name{
  shared variable declarations
    
    procedrue body P1(...) { ... }

    procedrue body P2(...) { ... }
    .
    .
    .
    procedrue body Pn(...) { ... }

    {initialization code}
}

  管程类型的表示不能直接为各个进程所使用。因此,在管程内定义的子程序只能访问位于管程内那些局部声明的变量和其形式参数。类似地,管程的局部变量只能为局部子程序所访问。

 

  条件变量提供了一个方法供管程程序来阻塞其执行,直到其被通知可继续。

 

 

 

原文地址:https://www.cnblogs.com/bigbigbigo/p/8641137.html