TC官方合作论坛
标题:
关于临界区的一点疑问 求解决 只是理解层面的!
[打印本页]
作者:
xenolss
时间:
2012-5-20 22:37
标题:
关于临界区的一点疑问 求解决 只是理解层面的!
全局 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 改变赋值
我的理解是不能
不知道对不对
请大神不吝赐教!
作者:
xenolss
时间:
2012-5-20 22:40
我对线程执行临界区里的东西做了个实验
发现只要不动全局共享资源
线程1 进入的函数开启临界区 所做功能操作 未离开临界区之前
线程2 也会立即执行
加入延迟也是如此
但是如果在该函数里加上一个改变全局变量的操作 延迟就生效了
线程2会等待线程1执行这个延迟并改变全局变量退出临界区之后 才操作
但是上面的功能B 是主程序执行的 不是单du开的线程 我不确定是不是也会和开2个线程一样的结果
作者:
xenolss
时间:
2012-5-20 23:03
求解释。。。。。。在线等
作者:
超自然
时间:
2012-5-21 01:25
你代码写错了,不是这么玩的
走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
作者:
xenolss
时间:
2012-5-21 01:52
回复
4楼
超自然
的帖子
明白了 谢谢自然大神的指点
这么写调试的时候就看的很清楚了!
作者:
xenolss
时间:
2012-5-21 01:55
回复
4楼
超自然
的帖子
大神 我还有个疑问
如果 A走了不能立刻删除临界 因为别的线程要进入 会崩
那么 如果有个功能我要长期 对全局进行操作 线程都是排队进入的
是不是不删除临界比较好?如果一直不删会不会有什么影响
作者:
tyuyan
时间:
2012-5-21 09:14
好吧!进来酱油下
作者:
花开花落
时间:
2012-5-21 10:08
来看看 。 学习下。
作者:
战斗之神
时间:
2012-5-21 11:25
看看 学习了。
作者:
超自然
时间:
2012-5-21 18:26
回复
6楼
xenolss
的帖子
我从来没删过,都是全程存在的,好像也没什么不可以
作者:
xenolss
时间:
2012-5-21 20:14
回复
10楼
超自然
的帖子
那我就放心了 我也全程开着 不管他
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1