public class DoubleCacheQueue<T> { public DoubleCacheQueue() { } public T Dequeue() { T t = default(T); if (readQueue.Count > 0) t= readQueue.Dequeue(); else { writeQueue = Interlocked.Exchange<Queue<T>>(ref readQueue, writeQueue); } return t; } public void Enqueue(T item) { writeQueue.Enqueue(item); } public int Count { get { return readQueue.Count; } } //讀緩沖 private Queue<T> readQueue = new Queue<T>(); //寫緩沖 private Queue<T> writeQueue = new Queue<T>(); }
問下大家,這段代碼能保證多線程安全嗎?
5 回答

慕妹3146593
TA貢獻1820條經(jīng)驗 獲得超9個贊
No。
隊列只剩一項數(shù)據(jù)時,并發(fā)去Dequeue可能會出異常。Queue<T>考慮常規(guī)則應用的效率,應該不會提供并發(fā)檢查。

繁花不似錦
TA貢獻1851條經(jīng)驗 獲得超4個贊
個人認為應該不是線程安全的
Dequeue和Enqueue方法都是直接操作Queue,而對Queue的線程安全MSDN上說法如下:
此類型的公共靜態(tài)成員是線程安全的。但不能保證任何實例成員是線程安全的。
所以個人認為應該不是線程安全的

交互式愛情
TA貢獻1712條經(jīng)驗 獲得超3個贊
非線程安全,不能確保在多線程情況下的讀寫。
但是只是一個線程讀,一個線程寫的情況下可以。
根據(jù)業(yè)務應用來設計自己的數(shù)據(jù)結(jié)構(gòu)操作,不一定非要完全線程安全。
在實施服務器連接管理器時,頻繁的上線、下線對于服務器的連接管理器hashtable加鎖勢必會增加服務器的開銷,使得效率低下
- 5 回答
- 0 關注
- 438 瀏覽
添加回答
舉報
0/150
提交
取消