专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-963-0016
微信咨询
|
联系我们
扫二维码关注公众号
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
位置:
网站建设
>
技术支持
> c# 阻塞队列
c# 阻塞队列
来源:网络整理 时间:2023/2/14 0:41:43 共
3669
浏览
/// <summary>
/// 阻塞队列[.net 4.0 貌似自带了阻塞队列]
/// </summary>
public class BlockQueue<T>
{
public readonly int SizeLimit = 0;
private Queue<T> _inner_queue = null;
public int Count
{
get { return _inner_queue.Count; }
}
private ManualResetEvent _enqueue_wait = null;
private ManualResetEvent _dequeue_wait = null;
public BlockQueue(int sizeLimit)
{
this.SizeLimit = sizeLimit;
this._inner_queue = new Queue<T>(this.SizeLimit);
this._enqueue_wait = new ManualResetEvent(false);
this._dequeue_wait = new ManualResetEvent(false);
}
public void EnQueue(T item)
{
if (this._IsShutdown == true) throw new InvalidCastException("Queue was shutdown. Enqueue was not allowed.");
while (true)
{
lock (this._inner_queue)
{
if (this._inner_queue.Count < this.SizeLimit)
{
this._inner_queue.Enqueue(item);
this._enqueue_wait.Reset();
this._dequeue_wait.Set();
break;
}
}
this._enqueue_wait.WaitOne();
}
}
public T DeQueue()
{
while (true)
{
if (this._IsShutdown == true)
{
lock (this._inner_queue) return this._inner_queue.Dequeue();
}
lock (this._inner_queue)
{
if (this._inner_queue.Count > 0)
{
T item = this._inner_queue.Dequeue();
this._dequeue_wait.Reset();
this._enqueue_wait.Set();
return item;
}
}
this._dequeue_wait.WaitOne();
}
}
private bool _IsShutdown = false;
public void Shutdown()
{
this._IsShutdown = true;
this._dequeue_wait.Set();
}
}
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
相关主题:
广州饭店装修网站设计公司
如何注册境外公司网站推广
如何注册境外公司网站账号
宿州市公司注册查询网站
嘉兴物联网公司招聘网站
如何在海南注册分公司网站
贵州网站设计策划报价公司
绍兴电商网站设计制作公司
含山县供电公司网站首页
东莞海外电商网站设计公司
·上一条:
C#中sealed关键字
|
·下一条:
C#集合-队列
同类资讯
C#中sealed关键字
C#排队处理DEMO
清除浏览器input中缓存
css3中的变形(transform)、过渡(transtion)、动画
一个完整的软件项目开发流程
利用SignalR进行消息推送(B\S及C\S模式)
史上最全面的SignalR系列教程-1、认识SignalR
教程:ASP.NET Core SignalR 入门
教程:通过 SignalR 2 进行实时聊天
Signalr实现消息推送
通过三个DEMO学会SignalR的三种实现方式
SignalR实现消息推送,包括私聊、群聊、在线所有人接收消息(源码)
SignalR实现在线聊天室功能
在微信小程序中使用WebSocket连接Asp.Net Core Sig
C# 操作IIS加强版(添加,删除,启动,暂停网站,默认页,绑定信息)
git忽略某个目录或文件不上传
如何使用git命令添加文件和提交文件
Android手机安装Sqlite3命令流程
android studio连接数据库
android Studio与数据库SQLserver连接实现登录
资讯动态
公司新闻
互联网资讯
电商资讯
优化推广
技术支持
关于我们
公司简介
企业文化
服务项目
公司新闻
服务项目
网站建设
网站推广
品牌策划
移动应用
服务支持
在线咨询
服务流程
产品报价
售后服务
联系我们
代理加盟
付款方式
在线留言
联系方式
联系方式
电话:400-963-0016
邮箱:sales@itwy.com
QQ:250211130
微信:18520775521
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有
粤ICP备16019765号
广州京杭网络科技有限公司 版权所有
18520775521
QQ洽谈
sales@itwy.com