中易网

postqueuedcompletionstatus 线程安全吗

答案:2  悬赏:0  
解决时间 2021-04-28 01:50
  • 提问者网友:离殇似水流年飞逝
  • 2021-04-27 05:15
postqueuedcompletionstatus 线程安全吗
最佳答案
  • 二级知识专家网友:伤口狠精致
  • 2021-04-27 06:52
postqueuedcompletionstatus 线程安全
在Unity3D中,因为游戏世界是3D世界,鼠标在屏幕上的点击并不能直接用于确定选中的是哪个物体。当然我们可以通过在被点击物体上添加脚本实现OnMouseDown()函数来处理点击事件。但是如果被点击物体是在运行过程中被动态生成的,添加脚本变得很麻烦。因此如果要在游戏中实现鼠标选择某一物体的效果,可以使用以下方法:
function Update () {
if(Input.GetButtonDown("Fire1")) {
//通过用户的点击中获取一条射线ray
var ray : Ray = Camera.main.ScreenPointToRay( Input.mousePosition );

//得到射线ray击中的所有目标
var array : Array = Physics.RaycastAll( ray );

var hit: RaycastHit;
var tf : Transform;

if(array.Count != 0){//若被击中目标数不为零
hit = array[0];//获得被击中的目标
tf = hit.transform;
//tf.gameObject;
全部回答
  • 1楼网友:邪性洒脱
  • 2021-04-27 07:22
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据 比如一个 arraylist 类,在添加一个元素的时候,它可能会有两步来完成:1. 在 items[size] 的位置存放此元素;2. 增大 size 的值。 在单线程运行的情况下,如果 size = 0,添加一个元素后,此元素在位置 0,而且 size=1; 而如果是在多线程情况下,比如有两个线程,线程 a 先将元素1存放在位置 0。但是此时 cpu 调度线程a暂停,线程 b 得到运行的机会。线程b向此 arraylist 添加元素2,因为此时 size 仍然等于 0 (注意,我们假设的是添加一个元素是要两个步骤,而线程a仅仅完成了步骤1),所以线程b也将元素存放在位置0。然后线程a和线程b都继续运行,都增加 size 的值,结果size等于2。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息