临界资源操作


    临界资源是系统中需要仔细考虑的问题。我们在设计代码的时候经常会有多个进程同时访问同一个资源的问题,特别是修改同一个资源会导致意外的情况。一般会有几种常用的策略,关闭总中断,加锁,信号量。

   关闭中断的办法是简单操作系统中经常使用的方法,在进入临界域的时候,关闭所有中断,防止操作被打断。但这个办法不适合多进程的复杂系统,会导致系统无法响应某些输入。

   加锁测试也是简单系统中常用的方式,实现简单,但是比较浪费CPU时间。下例就是一个加锁的伪代码

  

lock(key[s])
 {
    L:    if  key[s]==0
           then  goto  L
           else   key[s]=0
  }

unlock(key[s])
    {
      key[s]= 1
     }

PA()
{
  L1:   lock(key[s])
              <s>
          unlock(key[s])
          goto  L1
}

PB()
{
  L2:   lock(key[s])
              <s>
          unlock(key[s])
          goto  L2
}

PA和PB是两个进程,通过key做为锁来控制进入临界域的。


信号量法

  信号量法是OS中常用的互斥控制方法,它实现的原理是任务都在一个队列中,由队列的调度任务来控制当前任务的状态。

    一般对信号量的描述是这样的

设sem为信号量,则:

    当sem>=0时,表示可供并发进程使用的资源实体数

                当sem < 0时,表示正在等待使用资源的进程数


还有就是原语P,V操作



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值