2013-02-27 106 views
0

我使用unity3d在c#中创建一个游戏。这就像“交通躁狂症”。我需要排队的车在排队和出队他们,当他们穿越street.When我排队它,它工作正常..但是当我出列,我有这样的例外:我不能让队列同步在c#

“InvalidOperationException异常:操作不由于对象”

这里的当前状态,有效的是我的队列代码:

public Queue UD_queue; 

public int score; 

void Awake(){ 
    InitQueues(); 
     score = 0; 
} 


public void InitQueues(){ 
    DU_queue = new Queue(); 
    Debug.Log("queue initialized"); 
} 

private Queue syncQ(Queue q){ 
    Queue sync_q = Queue.Synchronized(q); 
    return sync_q; 
} 

public void DoEnqueue(GameObject go){ 
    lock(DU_queue) 
     DU_queue.Enqueue(go); 
} 

public void DoDequeue(){ 
    lock(DU_queue) 
     DU_queue.Dequeue(); 
     score +=500; 
} 

和其他类,我调用该方法DoEnqueue()和DoDequeue()

任何人都可以告诉我为什么lock(){}不起作用?

+0

您显然有多个线程访问此队列。请发布一个简短但完整的程序来展示问题。 – 2013-02-27 01:41:32

+0

为什么不使用ConcurrentQueue? – Jesse 2013-02-27 01:43:18

+0

简单的解释是你在一个空队列上调用了Dequeue()。没有证据表明您在拨打电话之前检查队列是否为空。你使用锁的方式肯定会增加犯这个错误的几率。 – 2013-02-27 02:10:56

回答

1

如何使用ConcurrentQueue。你不需要再使用任何锁。

+0

使用您的分数值处理时还要添加联锁。 – 2013-02-27 03:56:04