TC官方合作论坛

 找回密码
 立即注册
查看: 1315|回复: 9
打印 上一主题 下一主题

[已解决] 临界区,变量i是做什么的,什么意思

[复制链接]
跳转到指定楼层
楼主
发表于 2012-10-24 19:48:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上加入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)  //但是线程里的代码却可能还没有执行完毕,下一句删除了临界区对象,这时候如果还有别的语句线程却还在执行,程序可能崩溃
线程.删除临界区(对象句柄) //最后记得删除临界区对象释放资源,这时候如果在 线程.进入临界区(对象句柄) 程序就可能崩溃,因为对象不存在了
返回 真
功能结束
空间结束
回复

使用道具 举报

10#
发表于 2012-10-25 02:31:45 | 只看该作者
回复 5楼wudongdonghehe的帖子

if(i>0)
i=i-1
这个代码意思就是 如果i>0 还没等于0或者小于0 没有达到停止条件(什么是停止条件? 如果i小于等于0的时候就是你需要离开临界区的时候那么这个i>0就是不离开的条件 一旦这个不离开的条件不成立了就得离开了!)
至于计数  就是要执行的次数. 如果你要执行5次 那么 i就是从5开始5--4-3-2-1 到了0就停止了 也就是要离开临界区. 说明文档中的这个 i 是用来控制临界区操作的信号 要不要离开临界区 就判断这个信号(i)的值是否达到条件. 这个信号在实际使用中可以是任何能表达信号的东西,比如 ; 你绑定一个窗口  当绑定函数返回成功的时候让它离开临界区(怎么算成功? 靠函数的返回值来确定是否绑定成功, 这时候返回的值就是一种信号 这个信号就可以用来控制对临界区的操作是否继续进行.如果不进行那就离开.)  至于临界区的作用 是什么..简单的说就是一种同步机制.也是数据保护机制.  临界区常常用来避免线程间发生冲突(这个冲突包括很多情况,你可以在帮助文档里看看举例)
回复 支持 反对

使用道具 举报

9#
发表于 2012-10-24 22:05:02 | 只看该作者
回复 7楼shine宝宝的帖子

我的表达比你的容易懂点
尛情哥 发表于 2012-10-24 21:42:52
回复 支持 反对

使用道具 举报

8#
发表于 2012-10-24 21:42:52 | 只看该作者
回复 7楼shine宝宝的帖子

我的表达比你的容易懂点
回复 支持 反对

使用道具 举报

7#
发表于 2012-10-24 21:28:01 | 只看该作者
就是总共弹窗i次。。
回复 支持 反对

使用道具 举报

6#
发表于 2012-10-24 21:24:34 | 只看该作者
i是控制循环次数的
循环(真)
    线程.进入临界区(对象句柄)           //进入临界区,这时候其他线程不能访问临界区中资源,想要访问的线程会被挂起等待
如果(i>0)
    辅助.消息框("线程A")
    i=i-1
否则
    线程.离开临界区(对象句柄)         //因为有线程无限等待固最后要保证线程正确退出,否则会无限等待,程序假死
    跳出
如果结束
线程.离开临界区(对象句柄)            //离开临界区,这时候其他线程可以访问临界区中的资源
循环结束

循环(i>0)

    线程.进入临界区(对象句柄)           //进入临界区,这时候其他线程不能访问临界区中资源,想要访问的线程会被挂起等待



    辅助.消息框("线程A")

    i=i-1


线程.离开临界区(对象句柄)            //离开临界区,这时候其他线程可以访问临界区中的资源

循环结束
效果是一样的
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2012-10-24 21:09:35 | 只看该作者
回复 2楼saga的帖子

为啥,(i>0)
    i=i-1
这是什么意思,能说的详细一点吗?大神。
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2012-10-24 20:58:41 | 只看该作者
回复 3楼shine宝宝的帖子

为啥,(i>0)
    i=i-1
这是什么意思,弹窗计数,又是啥意思。能说的详细一点吗?大神。
回复 支持 反对

使用道具 举报

板凳
发表于 2012-10-24 20:23:05 | 只看该作者
就是个弹窗计数- -
回复 支持 反对

使用道具 举报

沙发
发表于 2012-10-24 19:53:55 | 只看该作者
这个i 是个诱导玩意....代表的是一种信号. 能提供这种信号的都可以当作i 看待. 这个信号是用来干嘛的 不用多说了吧.就是用来给程序提供处理临界区的动作执行的依据
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-10-9 17:23 , Processed in 0.167921 second(s), 27 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表