测试和设置指令如何满足(或不满足)关键部分方法的条件

时间:2014-09-12 11:47:42

标签: process operating-system data-synchronization

我正在查看进程同步并遇到了测试和设置指令

boolean testAndSet (boolean *target)
{  
     boolean rv = *target;
     *target = true;
     return rv;
}

main()
{
      do
      {
          while( testAndSet( &lock ));

          //critical section
          lock = false;

          //remainder section
       }while(true);

 }

这是以原子方式执行的(即每当对testAndSet进行函数调用时,在函数返回之前不会处理任何中断)。

现在我明白了这是如何消除互斥的(因为如果另一个进程正在执行它的关键部分,等待进程会在while循环中停滞不前)。但它如何满足Progress条件,更重要的是,它如何不满足有界缓冲条件?任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:1)

进展可以说,PO在关键部分,P1,P2和P3正在等待。 PO一旦离开,它就会将锁定设置为false,然后在下一个进程退出while条件并进入临界区域之后。 对于有限的等待,我不确定,但是如果让我们说,具有高优先级的P4会反复请求进入临界区。然后,P1,P2,P3永远不会有机会进入该部分。因此,他们会无限期地等待。