信号量操作

来源:互联网 发布:知乎怎么评价百田圈圈 编辑:程序博客网 时间:2024/06/05 05:16

一、信号量

1、信号量的实现

sturct semaphore{       //信号量由整型变量和等待队列组成    int count;    queueType queue;}wait(semaphore s)       //P操作{    s.count--;    if(s,count < 0)    {        阻塞该进程;        将该进程插入等待队列s.queue;    }}signal(semaphore s)     //V操作{    s.count++;    if(s.count <= 0)    {        从等待队列s.queue中取出第一个进程P;        将P插入就绪队列;    }}

2、信号量的分类:整型信号量和记录型信号量资源信号量
记录型信号量的初值为1,说明该资源同时只允许一个进程访问临界资源。

3、信号量的应用
(1)实现进程同步
这里的例子中,两个进程P1和P2,要求进程P1中S1的代码必须在进程P2的S2之前执行。

semaphora N=0;P1(){    ...    S1;    V(N);}P2(){    ...    P(N);    S2;    ...}

(2)实现进程的互斥
进程P1和P2两者有各自的临界区,要求同时只能有一个进程进入自己的临界区。

semaphore N=1;P1(){    ...    P(N);    P1的临界区代码;    V(N);}P2(){    ...    P(N);    P2的临界区代码;    V(N);}
0 0