文件名称:经典进程的同步问题-三菱plc fx通讯modbus用户手册
文件大小:27.24MB
文件格式:PDF
更新时间:2024-07-29 20:03:27
操作系统 汤小丹 汤子瀛
2.4 经典进程的同步问题 在多道程序环境下,进程同步问题十分重要,也是相当有趣的问题,因而吸引了不少 学者对它进行研究,由此而产生了一系列经典的进程同步问题,其中较有代表性的是“生 产者—消费者”问题、“读者—写者问题”、“哲学家进餐问题”等等。通过对这些问题的研 究和学习,可以帮助我们更好地理解进程同步的概念及实现方法。 2.4.1 生产者—消费者问题 前面我们已经对生产者—消费者问题(The proceducer-consumer problem)做了一些描述, 但未考虑进程的互斥与同步问题,因而造成了数据(Counter)的不定性。由于生产者—消费者 问题是相互合作的进程关系的一种抽象,例如,在输入时,输入进程是生产者,计算进程 是消费者;而在输出时,计算进程是生产者,而打印进程是消费者。因此,该问题有很大 的代表性及实用价值。本小节将利用信号量机制来解决生产者—消费者问题。 1.利用记录型信号量解决生产者—消费者问题 假定在生产者和消费者之间的公用缓冲池中,具有 n 个缓冲区,这时可利用互斥信号 量 mutex实现诸进程对缓冲池的互斥使用。利用信号量 empty和 full分别表示缓冲池中空缓 冲区和满缓冲区的数量。又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者 便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息。对生产 者—消费者问题可描述如下: Var mutex,empty,full: semaphore:=1,n,0; buffer:array[0,…,n-1] of item; in,out: integer:=0,0; begin parbegin proceducer: begin repeat M producer an item nextp; M wait(empty); wait(mutex); buffer(in):=nextp;