TC官方合作论坛

 找回密码
 立即注册
查看: 2477|回复: 10

[已解决] 关于临界区的一点疑问 求解决 只是理解层面的!

[复制链接]
发表于 2012-5-20 22:37:34 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
全局 int x

function bool A()
while(true)
hwndlj=thread.createcritical()
thread.thread.entercritical(hwndlj)
x=0
thread.leavecritical(hwndlj)
thread.deletecritical(hwndlj)
endwhile
return true
endfunction

function bool B()
while(true)
x=1
endwhile
return true
endfunction

function bool C()
thread.beginthread("空间.A","")
空间.B()
return true
endfunction
上面是2个死循环

我想问的是  当线程执行A进入临界区赋值全局x=0的时候 未离开临界区之前
B功能能否进入全局x 的地址对x 改变赋值
我的理解是不能
不知道对不对
请大神不吝赐教!
回复

使用道具 举报

发表于 2012-5-21 01:25:46 | 显示全部楼层
你代码写错了,不是这么玩的
走C,开出线程走A,去创建临界并赋值x,此时调用B,
A虽然在临界里,但是B去操作x因为没进临界所以临界里的事跟他没什么关系,照样可以操作
全局  int hwndlj,x
function bool A()
int i
while(true)
hwndlj=thread.createcritical()
thread.thread.entercritical(hwndlj)
while (i<100)
x=0
i=i+1
等待100毫秒
endwhile           //这循环是为了让你看清楚,暂时困住线程
thread.leavecritical(hwndlj)
thread.deletecritical(hwndlj)      //注意这里不能出去了就删,因为后面有个线程要进来,会崩的
endwhile
return true
endfunction

function bool B()
thread.deletecritical(hwndlj)
while(true)
if (x==1)
消息框
else
x=1
endif
endwhile
return true
endfunction

照这样试试吧,i=100之后,x才会被改成1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-20 22:40:04 | 显示全部楼层
我对线程执行临界区里的东西做了个实验
发现只要不动全局共享资源
线程1 进入的函数开启临界区 所做功能操作 未离开临界区之前
线程2 也会立即执行
加入延迟也是如此
但是如果在该函数里加上一个改变全局变量的操作  延迟就生效了
线程2会等待线程1执行这个延迟并改变全局变量退出临界区之后 才操作


但是上面的功能B 是主程序执行的  不是单du开的线程 我不确定是不是也会和开2个线程一样的结果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-20 23:03:56 | 显示全部楼层
求解释。。。。。。在线等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-21 01:52:05 | 显示全部楼层
回复 4楼超自然的帖子

明白了 谢谢自然大神的指点
这么写调试的时候就看的很清楚了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-21 01:55:46 | 显示全部楼层
回复 4楼超自然的帖子

大神 我还有个疑问
如果 A走了不能立刻删除临界 因为别的线程要进入 会崩
那么  如果有个功能我要长期 对全局进行操作 线程都是排队进入的
是不是不删除临界比较好?如果一直不删会不会有什么影响
回复 支持 反对

使用道具 举报

发表于 2012-5-21 09:14:47 | 显示全部楼层
好吧!进来酱油下
回复 支持 反对

使用道具 举报

发表于 2012-5-21 10:08:56 | 显示全部楼层
来看看 。  学习下。
回复 支持 反对

使用道具 举报

发表于 2012-5-21 11:25:51 | 显示全部楼层
看看   学习了。
回复 支持 反对

使用道具 举报

发表于 2012-5-21 18:26:39 | 显示全部楼层
回复 6楼xenolss的帖子

我从来没删过,都是全程存在的,好像也没什么不可以
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

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

GMT+8, 2024-6-30 09:00 , Processed in 0.046758 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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