进程互斥与进程同步

进程之间的相互作用关系分为两种,一种是共享资源的关系,一种是相互合作的关系,前者属于进程互斥、后者属于进程同步。我们把实现这两类相互制约关系的机制,统称为进程同步机制。同步机制有四大原则:空闲让进、忙则等待、有限等待、让全等待。

进程互斥:进程间的间接作用关系。两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域。比较典型的问题是打印机的共享访问。
进程同步:进程间的直接作用关系。在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。比较典型的问题有生产消费者问题、哲学家进餐问题等。

实现进程互斥的方式有:设定临界区、使用互斥量。

1.临界区,顾名思义,有一段代码区,每次最多只能由一个进程访问。由于进程是资源分配的最小单位,所以在临界区内资源的访问只能是同一进程下的子进程或线程访问。所以临界区的使用存在着局限性。临界区的使用操作原语有两个:EnterCriticalSection() 进入临界区
LeaveCriticalSection() 离开临界区

2.互斥量,字面上理解就是互斥访问的资源,只不过该资源是公用的,而不是某个进程私有的,所以这种机制可以实现不同进程的互斥。互斥量所使用的操作原语有四个:
CreateMutex() 创建互斥量
OpenMutex() 打开互斥量
ReleaseMutex() 释放互斥量
WaitForMultipleObjects() 等待互斥量

实现进程同步方式:使用信号量。
信号量的特点就是允许多个进程同时访问,数量由资源数目决定。
信号量包含的几个操作原语:
  CreateSemaphore() 创建信号量
  OpenSemaphore() 打开信号量
  ReleaseSemaphore() 释放信号量
  WaitForSingleObject() 等待信号量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章