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 回答

繁花不似锦
TA贡献1851条经验 获得超4个赞
个人认为应该不是线程安全的
Dequeue和Enqueue方法都是直接操作Queue,而对Queue的线程安全MSDN上说法如下:
此类型的公共静态成员是线程安全的。但不能保证任何实例成员是线程安全的。
所以个人认为应该不是线程安全的

交互式爱情
TA贡献1712条经验 获得超3个赞
非线程安全,不能确保在多线程情况下的读写。
但是只是一个线程读,一个线程写的情况下可以。
根据业务应用来设计自己的数据结构操作,不一定非要完全线程安全。
在实施服务器连接管理器时,频繁的上线、下线对于服务器的连接管理器hashtable加锁势必会增加服务器的开销,使得效率低下
- 5 回答
- 0 关注
- 418 浏览
添加回答
举报
0/150
提交
取消