进程间的交互分为竞争关系、协作关系。
1、竞争关系
由于计算机内资源有限,或者说某几个进程必须共享某些资源与变量,这时候就不可避免的会出现竞争,进程的相互竞争就会穿死锁和饥饿问题,饥饿问题已解释。
死锁问题是指一组进程如果都获得了部分资源,还想要得到其他进程占用的资源,最终所有进程都将陷入死锁,即都在等待,每个进程都不会先放手自己占有的资源。
进程互斥:若干进程在使用共享资源的时候,其他进程必须等待正在使用的进程释放该进程,临界区管理是解决进程互斥问题的办法。
2、协作关系
某些任务需要很多进程为其分工来完成,这时候需要协调互相之间的关系,比如某个进程在进行到某个点之后需要等待某些进程的消息和信号才能继续执行。(进程同步。
临界区:并发进程中与共享变量有关的程序段叫“临界区”。
临界资源:共享变量代表的资源叫做“临界资源”。
临界区调度原则:空闲让进、忙则等待、有限等待、让权等待。
3、信号量解决
p表示获取资源,一般会跟value--,v表示释放资源,后接value++。p、v一定是成对出现在同一个进程之中,否则会出现资源泄漏。
经典问题:哲学家进餐问题、生产者消费者问题、读写者问题、理发师问题。
哲学家进餐问题:五个哲学家围坐一张圆桌,桌上仅有五根筷子,每位哲学家只能拿起与他相邻的两根筷子吃饭。五根筷子都是临界资源
设为:semaphore fork[5] = {1,1,1,1,1};
philosopher_i