对信号量的理解

以下用伪代码的方式归纳了信号量的理解,呵呵,如果不对请指正!


-----------------------------------

信号量结构体定义:


结构体 semaphore 
{
    信号量value; 
    等待队列List
};

-----------------------------------

信号量S 操作:


Init

    初始化赋值value

    初始化等待队列


Wait

P(S) 

    信号量value--  

    若该值<0 则进程被阻塞后进入该信号量的等待队列,转入进程调度

    若   >=0 则进程继续执行


Signal

V(S)  

    信号量value++ 

    若该值>0 则进程继续执行 

    若   <=0 则从该信号队列中唤醒一个等待进程,然后在返回原进程继续执行或转入进程调度


在进行 信号量S++/S--的更新的时候要确保原子性,因此要将中断关闭,待更新完毕之后再立即将中断打开


----------------------------------------------------------------------

实例:


// 信号量初始化

信号量=2


// P操作1
信号量=1  进程继续执行

// P操作2
信号量=0  进程继续执行

// P操作3

信号量=0进程被阻塞进入该信号量的等待队列,转入进程调度


// P操作4
信号量=0 进程被阻塞进入该信号量的等待队列,转入进程调度

// V操作1

信号量=0 从该信号队列中唤醒一个等待进程,然后在返回原进程继续执行或转入进程调度


// V操作2

信号量=0 从该信号队列中唤醒一个等待进程,然后在返回原进程继续执行或转入进程调度


// V操作3

信号量=1 进程继续执行


// V操作4

信号量=2 进程继续执行


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值