Linux 版 (精华区)

发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标  题: NACHOS论坛(7)
发信站: 紫 丁 香 (Sun Nov  8 17:29:46 1998), 转信


寄信人: ship.bbs@bbs.xmu.edu.cn 
标  题: NACHOS论坛(7)(转寄)
发信站: 华南理工大学 BBS木棉站
日  期: Sun Mar  9 15:02:51 1997

作  家: 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
--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.223毫秒