我当时正在查看流程同步,并遇到了“测试设置”指令
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条件,更重要的是,它如何不满足bound-buffer条件?任何帮助,将不胜感激..
为了取得进展,可以说,PO在关键部分,P1,P2和P3在等待。PO离开后,立即将lock设置为false,然后下一个进程退出while条件并进入临界区。对于有限的等待,我不确定,但是如果说,具有较高优先级的P4出现并反复请求进入关键部分。然后,P1,P2,P3将永远没有机会进入该区域。因此,他们将无限期等待。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句