[理工] [OS] test-and-set

楼主: galapous (墨)   2014-12-24 21:07:37
想问的是使用此指令在design criticl section时,
恐龙的部分程式码如下,
do{
waiting[i] = True;
key = True;
while ( waiting[i] && key )
key = TestAndSet(&lock);
C.S.
j = ( i+1 ) % n;
while ( j != i && !waiting[j] )
j = ( j+1 ) % n;
if ( j = = i )
lock = False;
else
waiting[j] = False;
R.S
}while(true);
第三行到第五行为何不能简写成如下呢?
while(waiting[i] && TestAndSet(&lock))
do no-ip
不了解为什么要用一个key去接他的值。
作者: A4P8T6X9 (残废的名侦探)   2014-12-24 21:30:00
为了让人觉得有拿到 key?
作者: coilion9670 (QQ软)   2014-12-25 03:34:00
个人浅见不知道对不对while判断时中呼叫副程式再传回这样花的时间比较久当有process卡在while中无法进入临界区间就会一直call副程式,如果写在while判断后就可以避免此时间的浪费call副程式还有可能有抢资源的情形,能避免应该会是一大助益
楼主: galapous (墨)   2014-12-25 09:17:00
但照原本那样写也是每个while会call一次test-and-set不是吗?
作者: kkk99512 (小蜘蛛)   2014-12-25 18:07:00
这份Code在出口段的地方是不是有避免Starvation的动作?如果是的话,因为要做环状的检查,然后指定下一个进入C.S的Process,才会在入口段的地方加入这些条件
楼主: galapous (墨)   2014-12-25 18:52:00
出口有在没process想进来时把lock设成false,完全没动到key,所以才想说为啥不能省略掉
作者: kkk99512 (小蜘蛛)   2014-12-25 19:21:00
就是说出口地方,会指定下一个进C.S的程式是谁,不改Key因为如果改到Key的话,会造成大家一起抢Key如果有一只很衰一直抢不到,就违反Bounded-waiting了这样可以在保持Key不变的状况下,指定某只程式接续执行
作者: qoojordon (颖川琦)   2014-12-25 19:38:00
kkk的解释蛮好der , 受教惹 , 谢谢你
楼主: galapous (墨)   2014-12-25 20:21:00
如果多个process想进入的话下面是改waiting变成false假设现在process i从c.s.出来,那只有从i开始检查一轮到process i-1都没人想进去,才会改lock成false,这样应该没有bounded-waiting问题吧?因为没人想进等于重新开始?还是我哪边想错了QQ
作者: qoojordon (颖川琦)   2014-12-25 20:32:00
bounded waiting有错是发生在入口,原先有key的写法我更正 , 这份程式后半段和Peterson不同,我误会惹
作者: kkk99512 (小蜘蛛)   2014-12-25 21:27:00
我想我了解您的意思了,一下子没有看清楚 不好意思而且我开始觉得您说得好像有点道理

Links booklink

Contact Us: admin [ a t ] ucptt.com