1、计算机操作系统中国民航大学 冯霞In fact, P = Probeer (Try) and V = Verhoog (Increment, Increase by one). These are the operations embracing the critical section. Dijkstra introduced these ops in 1963第二章 进程管理 进程的基本概念 进程控制 进程同步 经典进程的同步问题 进程通信 线程 2.4 经典进程的同步问题经典进程的同步问题 在多道程序环境下,进程同步问题是十分重要的,也是相当有趣的问题,因而吸引了不少学者对它进行研究,由
2、此而产了一系列经典的进程同步问题。 进程同步: 相互合作的进程之间需要交换一定的信息,当某进程未获得其合作进程发来的信息之前,该进程等待,直到该信息到来时才被唤醒继续执行,从而保证诸进程的协调运行。2.4.1 生产者消费者问题 问题描述 一个有限空间的共享缓冲区,负责存放货物 生产者向缓冲区中放物品,缓冲区满则不能放 消费者从缓冲区中拿物品,缓冲区空则不能拿生产者消费者问题分析 互斥关系分析 任何时刻,只能有一个进程在缓冲区中操作 引入互斥信号量 信号量为 0,表明已有进程进入临界区; 同步关系分析 对于 “ 生产者 ” 而言,缓冲区满则应等待 引入同步信号量 “ empty” ,为 0表示缓
3、冲区满 对于 “ 消费者 ” 而言,缓冲区空则应等待 引入同步信号量 “ full” ,为 0表示缓冲区空利用记录型信号量解决生产者利用记录型信号量解决生产者 消费者问题消费者问题从资源的观点很容易解这个问题: 有空 buf,生产者才能送数据,可设 计数信号量 empty,初值为 n。 有装满数据的 buf,消费者才能取数据,故 计数信号量full,初值为 0。 对某个 buf应互斥使用,设 互斥信号量 mutex,初值为 1。Var mutex, empty, full:semaphore=1,n,0;buffer:array 0, , n-1 of item;in, out: intege
4、r=0, 0;beginparbeginproceducer:beginrepeat producer an item nextp; wait(empty);wait(mutex);buffer(in)=nextp;in=(in+1) mod n;signal(mutex);signal(full);until false;end 存储所产生的新项consumer:beginrepeatwait(full);wait(mutex);nextc =buffer(out);out =(out+1) mod n;signal(mutex);signal(empty);consumer the item in nextc; until false;endparendend 存储所要使用的项