BBS水木清华站∶精华区

发信人: raner (lilo), 信区: Linux 
标  题: NACHOS论坛(7) 
发信站: BBS 水木调试站 (Thu Jun  4 16:50:53 1998) 
 
作  家: solmon (所罗门王) on board 'Unix' 
题  目: NACHOS论坛(7) 
来  源:  鼓浪听涛站 
日  期: Thu Mar  6 23:07:20 1997 
出  处: mysu@JingXian.xmu.edu.cn 
 
            在NACHOS中有一个小错误. 
 
    NACHOS用一个全局变量标志当前需要Destroy的Thread.这个标志在各线程进行 
Switch时,可能被设置.实际上,这就是被调度下去的线程正要被Destroy.NACHOS的作 
者在呼叫Switch函数后,立即检查这个标志是否设定了,如果设定了,那么就真正地完 
成Destroy的动作.但此时,当前的活跃线程实际上是新调度上来的那个线程.如果新 
调度上来的线程没有从Switch函数中出来(只有一种情况会这样,那就是这个线程是 
刚刚启动的,所以进入了ThreadRoot,而非Switch),那么这个要被Destroy的线程就会 
被搁置在那里,没有立即被删除调.当然,下一次Switch时,也有机会删除这个线程,但 
是如果这个新被调度上来的线程正好也死去了,那么这个标志将会被覆盖,前面的那个 
线程的Destructor不会被叫用. 
    综合上述,我们可以知道,在下面的情况下,NACHOS会产生一个错误: 
    1.一个线程死去了,而新调度上来的那个线程是一个刚刚创建的线程. 
    2.这个刚刚创建的线程在下一次被调度下去时,也死去了. 
    产生的错误是前面死去的那个线程的Destructor没有被叫用,它占用的资源没有 
被释放. 
 
 
-- 
m※ 来源:.鼓浪听涛站 bbs.xmu.edu.cn.[FROM: mysu@JingXian.xmu.ed] m 
 
-- 
※ 来源:·BBS 水木调试站 Leeward.lib.tsinghua.edu.cn·[FROM: 166.111.68.98] 

BBS水木清华站∶精华区