首页 > 代码库 > 信号量(Semaphore) 之一

信号量(Semaphore) 之一

前提:
    在多任务操作系统下,多个进程会同时运行,并且一些进程之间可能存在一定的关联.
同步关系与互斥关系:
    多个进程可能为了完成同一个任务相互协作,这样形成进程之间的同步关系.
 而且在不同进程之间,为了争夺有限的系统(硬件或软件资源) 会进入竞争状态,这就是进程之间的互斥关系.
本质:
    进程之间的互斥与同步关系存在的根源在于临界资源.
临界资源:
    在同一个时刻只允许有限个(通常只有一个)进程可以访问(读)或修改(写)的资源.
临界区:
 访问临界资源的代码叫做临界区,临界区本身也会成为临界资源.
信号量是用来解决进程之间的同步与互斥问题的一种进程之间通信机制.包括:
 1.一个称为信号量的变量
 2.在信号量下等待资源的进程等待队列
 3.PV原子操作
 其中:
   信号量 对应于某一种资源,取一个非负的整形值.
   信号量值sv指的是当前可用的该资源的数量,若sv==0,则意味着目前没有可用的资源.(即 0表示 所有资源均被占用,非0表示 具有资源可用)
   PV原子操作的具体定义如下:
     P操作 if (sv>0),则占用一个资源且sv--,进入临界区代码;if (sv==0),则被阻塞.即
        进入等待队列,一直等到资源分配给该进程
  V操作 如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程;如果没有进程等待它,则释放一个资源(即sv++)
---To be Continued

信号量(Semaphore) 之一