什么是AND信号量

如题所述

AND型信号量是指同时需要多个资源且每种占用一个资源时的信号量操作。即在一个原语中申请整段代码需要的多个临界资源,要么全部分配给它,要么一个都不分配给它。以避免当一段处理代码需要同时获取两个或多个临界资源时,出现由于各进程等待其余的临界资源,变成死锁的情况。

扩展资料:

在AND型信号量中时,各个信号的次序并不重要,虽然会影响进程归人哪个阻塞队列,但是因为是采取原子操作方式,对资源全部分配或不分配,所以总有进程获得全部资源并在推进之后释放资源,因此不会死锁。

由于AND型信号量中一般信号在使用时的灵活性,因此通常并不成对使用Swait和Ssignal。为了避免死锁可一起申请所有需要的资源,但不一起释放。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-01
  AND信号量是指在一些应用场合,一个进程需要先获得两个或者更多的共享资源后方能执行其任务。
  假定现在有两个进程A和B,他们都要求访问共享数据D和E。当然,共享数据都应该作为临界资源。为此,可为这两个数据分别设置用于互斥的信号量Dmutex和Emutex,并令他们的初值都是1。相应的,在两个进程中都要包含两个对Dmutex和Emutex的操作,即:
  process A: process B:
  wait(Dmutex); wait(Emutex);
  wait(Emutex); wait(Dmutex);
  若进程A和B处于僵持状态。在无外力作用下,两者都将无法从僵持状态中解脱出来。我们称此时的进程A 和B已经进入死锁状态。显然,当进程同时要求的共享资源愈多时,发生进程死锁的可能性就越大。
  AND同步机制的基本思想是:将进程在整个运行过程中需要的所有资源,一次性全部的分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其它所有有可能为之分配的资源也不分配给它。亦即,对若干个临界资源的分配,采取原子操作方式:要么把它所请求的资源全部分配给进程,要么一个也不分配。由死锁理论可知,这样就可以避免上述死锁情况发生。为此,在wait操作中,增加一个“AND”条件,故称为AND同步,或称为同时wait操作,即Swait(Simultaneous wait)定义如下:
  Swait(S1,S2,......Sn)
  if Si>=1 and ....and Sn>=1 then
  for i:=1 to n do
  Si:=Si-1;
  endfor
  else
  place the process in the waiting queue associated with the first Si found with Si<1,and set the program count of this process to the beginning of Swait operation
  endif
  Ssignal(S1,S2,...Sn)
  for i:=1 to n do
  Si:=Si+1;
  Remove all the process waiting in the queue associated with Si into the ready queue.
  endfor;
第2个回答  2013-10-07
就是将进程在整个运行过程中需要的所有资源,一次性全部的分配给进程,待进程使用完之后再一起释放,对若干个临界资源的分配,采取原子操作方式:要么全部分配到进程,要么一个也不分配
第3个回答  2013-10-14
为解决并行带来的死锁问题,在wait 操作中引入AND 条件,其基本思想是将进 程在整个运行过程中所需要的所有临界资源,一次性地全部分配给进程,用完后一次性释放。
相似回答