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(){}不起作用?
您显然有多个线程访问此队列。请发布一个简短但完整的程序来展示问题。 – 2013-02-27 01:41:32
为什么不使用ConcurrentQueue? – Jesse 2013-02-27 01:43:18
简单的解释是你在一个空队列上调用了Dequeue()。没有证据表明您在拨打电话之前检查队列是否为空。你使用锁的方式肯定会增加犯这个错误的几率。 – 2013-02-27 02:10:56