为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码能保证多线程安全吗?

这段代码能保证多线程安全吗?

哆啦的时光机 2018-12-06 23:21:00
 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条经验 获得超9个赞

No。

队列只剩一项数据时,并发去Dequeue可能会出异常。Queue<T>考虑常规则应用的效率,应该不会提供并发检查。

查看完整回答
反对 回复 2019-01-21
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

个人认为应该不是线程安全的

Dequeue和Enqueue方法都是直接操作Queue,而对Queue的线程安全MSDN上说法如下:

此类型的公共静态成员是线程安全的。但不能保证任何实例成员是线程安全的。

所以个人认为应该不是线程安全的

查看完整回答
反对 回复 2019-01-21
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

内部是俩个q,不是一个,每个线程各操作一个

查看完整回答
反对 回复 2019-01-21
?
交互式爱情

TA贡献1712条经验 获得超3个赞

非线程安全,不能确保在多线程情况下的读写。

但是只是一个线程读,一个线程写的情况下可以。

根据业务应用来设计自己的数据结构操作,不一定非要完全线程安全。

在实施服务器连接管理器时,频繁的上线、下线对于服务器的连接管理器hashtable加锁势必会增加服务器的开销,使得效率低下

查看完整回答
反对 回复 2019-01-21
  • 5 回答
  • 0 关注
  • 418 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号