假設我有一個模塊,它有一個隊列。.NET - Queue.Enqueue方法線程安全嗎?
其他實體來排隊,他們必須經過一個功能:
public sub InsertIntoQueue(Obj)
MyQueue.Enqueue(Obj)
end sub
如果我有多個線程運行,他們想打電話InsertIntoQueue(),這被認爲是線程安全的?
我的印象是,只有一條執行InsertIntoQueue()函數所需的內存指令副本......這會導致我認爲這是線程安全的。
但是,我想知道當兩個線程同時嘗試運行該函數時會發生什麼?
此線程是否安全,如果不是,我該如何使線程安全? (以及關於速度和內存使用情況的性能影響是什麼)
我的計劃是有多個線程入隊,並且一個線程鎖定並以特定間隔刷新整個隊列。 – 2009-11-03 08:16:33
如果在處理隊列中的所有對象時鎖定,則所有排隊的線程都將阻塞(如果它們嘗試入隊),直到您的出隊線程完成爲止,最好鎖定每個線程的空檢查和出隊而不是整個隊列處理。 – Matt 2009-11-03 20:14:01