魔兽地图编辑器专家_威城网


互联网 站内搜索
当前位置: 主页 > 高级教程 >

触发中的线程冲突

时间:2011-01-09 19:30来源:wow8 作者:zhlbci 点击:
触发的原理就是事件-条件-动作机制,事件发生满足所需条件执行下面的动作。一些人触发的原理不是很清楚,我就来简单介绍下触发执行原理。 实际情况触发事件的发生往往是并行发

    触发的原理就是事件-条件-动作机制,事件发生满足所需条件执行下面的动作。一些人触发的原理不是很清楚,我就来简单介绍下触发执行原理。



    实际情况触发事件的发生往往是并行发生的,比如任意单位被攻击事件,任意单位被攻击了都会去执行触发,从而引发多个程序流,这就是多线程。线程的概念就是程序中一个单一的顺序控制流程,同时运行多个线程就是多线程。既然是多线程就有产生冲突的可能。这里先来说说线程安全。所谓线程安全指的是,代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。线程没有系统资源或只拥有一点必不可少的系统资源,所以在访问系统资源时就有冲突的可能。由于局部变量会在每个线程产生时分配地址,所以不会冲突。而全局变量由于各个线程都可以访问并改变变量中的数据,所以使用全局变量时要小心了。使用全局变量时避免冲突的常用方法是利用判断语句分流(也可以是其他方式),将各个线程分配去访问不同的全局变量(主要通过数组来实现)。

 

这里有一个误区很多新手认为使用数组一定不会产生冲突,一定可以支持多人。这就要看数组的索引是用来干嘛的,如果索引没有用来区分不同的线程来指引线程访问不同的变量,还是一样会冲突。置于支持多人,一般是指多个玩家触发,对应不同的玩家产生不同的线程,而这些线程不会发生碰撞,则线程安全也就支持多人。但是很多时候,一个玩家也会引发多线程,这就不是支持多人的问题了。如果还认为这是一个是否支持多玩家的问题那就错了,分流不够彻底,只区分不同玩家产生的线程,一个玩家产生的多线程仍发生碰撞。

(责任编辑:admin)
分享到:
顶一下
(8)
61.5%
踩一下
(5)
38.5%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
栏目列表
推荐内容
广告