|
马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
空间 临界区
整型 对象句柄,i //定义一个全局的临界区句柄和一个控制变量i
功能 逻辑型 线程A()
循环(真)
线程.进入临界区(对象句柄) //进入临界区,这时候其他线程不能访问临界区中资源,想要访问的线程会被挂起等待
如果(i>0)
辅助.消息框("线程A")
i=i-1
否则
线程.离开临界区(对象句柄) //因为有线程无限等待固最后要保证线程正确退出,否则会无限等待,程序假死
跳出
如果结束
线程.离开临界区(对象句柄) //离开临界区,这时候其他线程可以访问临界区中的资源
循环结束
返回 真
功能结束
功能 逻辑型 线程B()
循环(真)
线程.进入临界区(对象句柄) //进入临界区,这时候其他线程不能访问临界区中资源,想要访问的线程会被挂起等待
如果(i>0)
辅助.消息框("线程B")
i=i-1
否则
线程.离开临界区(对象句柄) //因为有线程无限等待固最后要保证线程正确退出,否则会无限等待,程序假死
跳出
如果结束
线程.离开临界区(对象句柄) //离开临界区,这时候其他线程可以访问临界区中的资源
循环结束
返回 真
功能结束
功能 逻辑型 开始_点击()
对象句柄=线程.创建临界区() //创建临界区对象
i=10 //初始化 i
整型 句柄A=线程.开启("临界区.线程A","")
整型 句柄B=线程.开启("临界区.线程B","")
线程.等待(句柄A,-1) //无限等待线程A,B,这个等待很重要,我们可以用别的方法代替,如果这里不等待函数就执行完返回了
线程.等待(句柄B,-1) //但是线程里的代码却可能还没有执行完毕,下一句删除了临界区对象,这时候如果还有别的语句线程却还在执行,程序可能崩溃
线程.删除临界区(对象句柄) //最后记得删除临界区对象释放资源,这时候如果在 线程.进入临界区(对象句柄) 程序就可能崩溃,因为对象不存在了
返回 真
功能结束
空间结束
|
|