读者/写者问题
为多个进程访问一个共享数据区建立一个通用模型,若干进程只能读数据,若干进程只能写数据。
允许多个读者进程同时读数据。
不能允许多个写者进程同时写数据,即只能互斥写数据。
若有写者进程正在写数据,则不允许读者进程读数据。
读者优先的方法:当一个读者在读数据时,另外的读者也可以进入读数据。只有所有读者都退出才允许写者进入写数据。
写者优先:为了防止读者优先可能导致饥饿,当数据区被读者占用时 ,后续紧邻到达的读者可以继续进入,若这是有一个写者到来且阻塞等待,则写者后面到来的读者必须阻塞等待写者。
管程
管程是一种在程序设计级控制进程互斥与同步的机制,具有信号量的功能。
管程是由过程、变量及数据结构等组成的集合。典型的管程包括三个部分:
1、对局部于冠城的共享数据结构的说明
2、对该数据结构进行操作的一组过程。
3、对该数据结构初始化的语句。
管程的使用:管程本省被作为一种临界区,进程可以再任何地方调用管程中的过程,但不能在管程外直接访问管程内的数据结构。
当一个进程调用管程中的过程时,首先检查管程中是否有其他的活跃进程,如果有则阻塞调用进程。