2013-02-27 103 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