|
发表于 2017-8-31 12:20:30
|
显示全部楼层
呵呵,有一点点复杂,而且你忽略了一个临界区的一个特性,当某线程正在排队等待进入临界区时,此时关闭线程,这个线程也会照样进入临界区,占着临界区的,当然,你的进入临界区后的操作简短快速,影响不大,但如果进入临界区后的操作较多,需求时间较长时,影响就会比较明显.
记号1=1
线程.进入临界区(临界区标志)
这两句调换一下位置后,可以防止"记号1"的线程碰巧在等待进入临界区状态时被结束.
另外可以考虑在有临界区的死循环线程上加入一个自结束的指令,这样可能程序比较清楚清晰.
//以下用5.x以上的写法了
定义一全局变量: 变量 是否结束线程数组=数组("句柄1"=假,"句柄2"=假)
功能 第一个()
循环(真)
如果(是否结束线程数组["句柄1"])
句柄1 = 0
是否结束线程数组["句柄1"] = 假
跳出
结束
临界区进入(临界区标志)
......
......
......
临界区离开(临界区标志)
结束
结束
这样需要关闭句柄1时 赋值全局变量 是否结束线程数组["句柄1"]=真
然后循环检查句柄1==0时 就是已成功关闭句柄1的线程了
以上仅为纸上谈兵,没经过长时间暴力调试,若要应用到实际工作环境时请谨慎使用.
|
|