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