TC官方合作论坛

 找回密码
 立即注册
查看: 1905|回复: 5

[已解决] 临界区问题

[复制链接]
发表于 2015-12-2 17:07:38 | 显示全部楼层 |阅读模式

马上加入TC

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

x
因为游戏开挂有人举报,我把侦测人的动作单独用一个线程,而打怪及其它用另外一个线程,为的就是立即能发现有人在附近。但我用多线程,侦测到人时,取改变一个全局变量。而打怪的线程每次循环会有多次读取这个变量。这样就出现了问题:
1. 不使用临界区,程式运行数小时后死掉,应该是全局变量的读写问题。
2. 使用临界区,因为教材很少我想问:

函数1
临界区进入(临界区1)
操作
临界区退出(临界区1)


函数2
临界区进入(临界区1)
操作
临界区退出(临界区1)



以上2个函数都使用的临界区1,如果有人在函数1中操作临界区,此时有线程到了函数2的临界区,是不是会等待函数1执行完成,才能进入?


说到底就是临界区是整个程序共用,还是函数独立使用的问题。


3. 还有个问题就是,我按钮点击停止所有线程后,再点击按钮开始,会死掉,应该是线程被停止时,临界区这边未处理好。我现在只能定义一个临界区数组,每次重新开始就数组加1,换另外一个临界区就没问题。


4. 使用临界区后,程式还是会死掉,不知道是不是多线程TC有漏洞,还是我程式不完善,如果程式不完善,我会再改。问下你们多线程很稳定吗?
回复

使用道具 举报

发表于 2015-12-4 13:32:15 | 显示全部楼层
本帖最后由 klyyz1980 于 2015-12-4 13:34 编辑

第一个问题的回答是,临界区是整个程序共用的,有人进入1号临界区后,其他到1号临界区来的人就要等着排队。第二个问题可以自己定义一个变量判断是否有程序在临界区里工作,如果有就不退出或者选择先退出临界区再停止。望采纳
回复 支持 反对

使用道具 举报

发表于 2015-12-3 10:16:15 | 显示全部楼层
停止了所有线程,但是之前的临界区可能并没有退出来,结束线程之后退出临界区,并初始化临界区试试
进入临界区之后 操作不要太长,不要乱用,线程阻塞容易卡死
回复 支持 反对

使用道具 举报

发表于 2015-12-4 22:21:44 | 显示全部楼层
临界区的缺点是有一个线程在临界区内挂掉所有的线程都要在临界区外无限等待,不如用事件试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-8 09:33:55 | 显示全部楼层
klyyz1980 发表于 2015-12-4 13:32
第一个问题的回答是,临界区是整个程序共用的,有人进入1号临界区后,其他到1号临界区来的人就要等着排队。 ...

我改成单线程了,尽然还死了,好像是findpic函数死掉了,这这道什么回事吗?
回复 支持 反对

使用道具 举报

发表于 2015-12-9 17:42:40 | 显示全部楼层
写程序不能用貌似一类的词语,你需要用调试方法,确定问题出在哪里,如果是图色卡死就加点延时。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

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

GMT+8, 2024-10-2 04:03 , Processed in 0.033887 second(s), 23 queries .

Powered by 海安简单软件服务部

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

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