三个方法均非线程安全。
即使只有读线程不停的Dequeue 一个写线程不停的Enqueue,也有问题。 因为Interlocked.Exchange只是解决了赋值操作的并发问题,当其执行后,二个线程访问的是相同一个对象readQueue,焉能不出问题。
Exchange是交换,交换后,俩个线程各自操作自己的Queue,不是操作同一个Queue啊?
No。
队列只剩一项数据时,并发去Dequeue可能会出异常。Queue<T>考虑常规则应用的效率,应该不会提供并发检查。
个人认为应该不是线程安全的
Dequeue和Enqueue方法都是直接操作Queue,而对Queue的线程安全MSDN上说法如下:
此类型的公共静态成员是线程安全的。但不能保证任何实例成员是线程安全的。
所以个人认为应该不是线程安全的
内部是俩个q,不是一个,每个线程各操作一个
非线程安全,不能确保在多线程情况下的读写。
但是只是一个线程读,一个线程写的情况下可以。
根据业务应用来设计自己的数据结构操作,不一定非要完全线程安全。
在实施服务器连接管理器时,频繁的上线、下线对于服务器的连接管理器hashtable加锁势必会增加服务器的开销,使得效率低下