码迷,mamicode.com
首页 > 编程语言 > 详细

构建线程安全队列示例

时间:2018-05-12 11:57:07      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:sea   read   object   线程   tor   class   private   lock   zed   

 1     /// <summary>
 2     /// 线程安全的队列
 3     /// 允许多个线程对队列入队出队
 4     /// 注意:除非有一个可供处理的数据项,否则试图出队一个数据项的线程会一直阻塞
 5     /// </summary>
 6     /// <typeparam name="T"></typeparam>
 7     internal sealed class SynchronizedQueue<T>
 8     {
 9         //进出队使用同一个锁
10         private readonly object m_lock = new object();
11 
12         private readonly Queue<T> m_queue = new Queue<T>();
13 
14         /// <summary>
15         /// 入队
16         /// </summary>
17         /// <param name="item"></param>
18         public void Enqueue(T item)
19         {
20             Monitor.Enter(m_lock);
21 
22             //一个数据项入队
23             m_queue.Enqueue(item);
24 
25             //唤醒所有正在等待的线程
26             Monitor.PulseAll(m_lock);
27 
28             Monitor.Exit(m_lock);
29         }
30 
31         /// <summary>
32         /// 出队
33         /// </summary>
34         /// <returns></returns>
35         public T Dequeue()
36         {
37             Monitor.Enter(m_lock);
38 
39             //队列为空就一直循环
40             while (m_queue.Count == 0)
41             {
42                 Monitor.Wait(m_lock);
43             }
44 
45             //一个数据项出队
46             T item = m_queue.Dequeue();
47 
48             Monitor.Exit(m_lock);
49 
50             return item;
51         }
52     }

 

构建线程安全队列示例

标签:sea   read   object   线程   tor   class   private   lock   zed   

原文地址:https://www.cnblogs.com/xuejietong/p/9022137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!