整形信号量

信号量可以理解为某一类可用资源的数目,信号量用来解决进程同步和互斥问题。整型信号量是整型量,仅能通过两个原子操作来访问。原子操作是不可中断的,原子操作就是原语的执行,这段代码不可中断,要执行都执行完,若执行不完则回到这段代码起始位置重新执行。两个原子操作分别是P操作和V操作:

// P操作 伪代码
wait(S):
    While(S<=0) do no-op;
    S--;


// V操作 伪代码
signal(S):
    S++;

// 这里的S就是整型信号量,wait(S)可以写作P(S),signal(S)可以写作V(S)。

我们看如何使用PV操作实现互斥:

// 用信号量机制实现互斥的模式
semaphore  mutex = 1;
        begin
        parbegin
            process 1: begin
                           repeat
                               wait(mutex);
                               critical section
                               signal(mutex);
                               remainder section
                           until false;
                       end
            process 2: begin
                           repeat
                               wait(mutex);
                               critical section
                               signal(mutex);
                               remainder section
                            until false; 
                       end
        parend  
        end     

mutex代表可用资源的数目,假设mutex=1,两个进程竞争使用mutex,那么防止不同步问题出现,每个进程中都要成对使用wait和signal。比如P1执行wait,mutex--代表使用资源,然后进行其他计算,这时P2执行wait无法通过判断条件,mutex=0表示当前没有可用资源,于是程序计数器调整指针回到wait起始代码。这样就很好的保证了P2不会参与P1的运行。P1执行完critical section临界区,执行signal,mutex++表示资源回收,这时P2才可以进行wait的执行。

整形信号量也是存在缺点的,比如wait中如果条件不满足就要一直循环等待,这违背了同步机制的让权等待规则;并且整型信号量是在一种资源且只有一个的情形下使用的,实际情况没有这么简单。由此改进而来的记录型信号量出现了。

 

传送门:记录型信号量AND型信号量信号量集

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值