同步
同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某
些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互
合作。
互斥
我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都
属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
对临界资源的访问,必须互斥地进行。
互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
进程互斥的软件实现方法
进程互斥的硬件实现方法
信号量机制
信号量其实就是一个变量 (可以是一个整数,也可以是更复杂的记录型变量) ,可以用一个信号量来表示系统中某种资源的剩余数量(信号量的值如果小于0,说明此时有进程在等待这种资源), 比如:系统中只有一台打印机,就可以设置一个初值为 1 的信号量。
原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。软件解决方案的主要问题是由“进入区的各种操作无法一气呵成”,因此如果能把进入区、退出区的操作都用“原语”实现,使这些操作能“一气呵成”就能避免问题。
一对原语:wait(S) 原语和 signal(S) 原语,可以把原语理解为我们自己写的函数,函数名分别为 wait和signal,括号里的信号量 S 其实就是函数调用时传入的一个参数。wait、signal 原语常简称为 P、V操作(来自荷兰语 proberen 和 verhogen)。因此,做题的时候常把wait(S)、signal(S) 两个操作分别写为 P(S)、V(S)
- P( S ) —— 申请一个资源S,如果资源不够就阻塞等待, 剩余资源数减1
- V( S ) —— 释放一个资源S,如果有进程在等待该资源,则唤醒一个进程, 剩余资源数加1
生产者消费者问题
生产者、消费者共享一个初始为空、大小为n的缓冲区。
- 只有缓冲区没满时,生产者才能把产品放入缓冲区,缓冲区满时,生产者必须等待。
- 只有缓冲区不空时,消费者才能从中取出产品,缓冲区空时,费者必须等待。
semaphore mutex = 1; //互斥信号量,实现对缓冲区的互斥访问
semaphore empty = n;//同步信号量,表示空闲缓冲区的数量
semaphore full = 0;//同步信号量,表示产品的数量,也即非空缓冲区的数量
互斥: 在临界区前后分别PV
同步: 前V后P
多生产者多消费者
结论:即使不设置专门的互斥变量mutex,也不会出现多个进程同时访问盘子的现象
原因在于:本题中的缓冲区大小为1,在任何时刻,apple、orange、plate 三个同步信号量中最多只有一个是1。因此在任何时刻, 最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…
吸烟者问题
读者写者问题
哲学家进程
管程
管程是一种特殊的软件模块,由这些部分组成:
- 局部于管程的共享数据结构说明;
- 对该数据结构进行操作的一组过程;
- 对局部于管程的共享数据设置初始值的语句;
- 管程有一个名字。
跨考Tips: “过程”其实就是“函数”
管程的基本特征:
- 局部于管程的数据只能被局部于管程的过程所访问;
- 一个进程只有通过调用管程内的过程才能进入管程访问共享数据;
- 每次仅允许一个进程在管程内执行某个内部过程。