C#排队处理DEMO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; namespace TestWait
{
class Program
{
public static Queue<Proccess> QueueMessage = new Queue<Proccess>();
static int count = 15;//只有15张票 static void Main(string[] args)
{ StartProccess();
//模拟并发 20个人同时买票
for (int i = 0; i < 20; i++)
{ ThreadPool.QueueUserWorkItem(new WaitCallback ((o)=>{
string index = (string)o;
Bay(index);
}),"客户端"+i);
}
Console.ReadKey();
} //购买服务
static bool Bay(String val)
{
Proccess p = new Proccess();
p.val = val;
p.ManualReset = new ManualResetEvent(false);
//lock (QueueMessage)
{
QueueMessage.Enqueue(p);//消息入列
Console.WriteLine("入列:" + val);
}
WaitHandle.WaitAll(new WaitHandle[] { p.ManualReset });//等待处理完成
return p.Result;
} //启动处理线程
static void StartProccess()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ProccessThread));
} //处理线程
static void ProccessThread(Object obj)
{
while (true)
{
if (QueueMessage.Count > 0)
{
Proccess message = QueueMessage.Dequeue();
if (count <= 0)
{
message.Result = false;
Console.WriteLine("处理失败:" + message.val);
}
else
{
message.Result = true;
Console.WriteLine("处理成功:" + message.val);
}
count--;
if (message.ManualReset != null)
message.ManualReset.Set();
}
else
{
//如果没有消息 停止3s
Thread.Sleep(3000);
}
}
}
} class Proccess{
public ManualResetEvent ManualReset
{
get;
set;
} public bool Result
{
get;
set;
} public String val
{
get;
set;
}
}
}
C#排队处理DEMO的更多相关文章
- Qt Undo Framework Demo
Qt Undo Framework Demo eryar@163.com Abstract. Qt’s Undo Framework is an implementation of the Comma ...
- MVC+MQ+WinServices+Lucene.Net Demo
前言: 我之前没有接触过Lucene.Net相关的知识,最近在园子里看到很多大神在分享这块的内容,深受启发.秉着“实践出真知”的精神,再结合公司项目的实际情况,有了写一个Demo的想法,算是对自己能力 ...
- WebRTC之带宽控制部分学习(1) ------基本demo的介绍
转自:http://blog.csdn.net/u013160228/article/details/46392037 WebRTC的代码真是非常之大啊,下载以及编译了我好几天才搞完..... 可以看 ...
- Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略
1.什么是Semaphore? A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acq ...
- Java中的多线程Demo
一.关于Java多线程中的一些概念 1.1 线程基本概念 从JDK1.5开始,Java提供了3中方式来创建.启动多线程: 方式一(不推荐).通过继承Thread类来创建线程类,重写run()方法作为线 ...
- Android -BLE蓝牙小DEMO
代码地址如下:http://www.demodashi.com/demo/13890.html 原文地址: https://blog.csdn.net/vnanyesheshou/article/de ...
- 【一起学源码-微服务】Hystrix 源码一:Hystrix基础原理与Demo搭建
说明 原创不易,如若转载 请标明来源! 欢迎关注本人微信公众号:壹枝花算不算浪漫 更多内容也可查看本人博客:一枝花算不算浪漫 前言 前情回顾 上一个系列文章讲解了Feign的源码,主要是Feign动态 ...
- 透过实例demo带你认识gRPC
摘要:gRPC是基于定义一个服务,指定一个可以远程调用的带有参数和返回类型的的方法.在服务端,服务实现这个接口并且运行gRPC服务处理客户端调用. 本文分享自华为云社区<gRPC介绍以及spri ...
- 通过一个demo了解Redux
TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...
随机推荐
- Docker(二十四)-Docker使用Portainer搭建可视化界面
Portainer介绍 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台 ...
- Graph Database & 图形数据库
Graph Database 图形数据库 https://en.wikipedia.org/wiki/Graph_database cayley https://github.com/cayleygr ...
- Racket里的方括号
Racket里的方括号 Racket编程指南 https://blog.csdn.net/chinazhangyong/article/category/7386082 来自于QQ群racket!( ...
- wamp安装失败原因大全
wamp 是 Windos.Apache.Mysql.PHP集成安装环境 为了安装hdwiki 所以需要这个环境 1.下载wampserver_x86_3.0.6 64位 环境包,安装路径禁止有空格 ...
- MT【187】余弦的线性组合
已知$\alpha+\beta+\gamma=\pi,(\alpha,\beta,\gamma\ge0)$ 求:$3\cos\alpha+4\cos\beta+5\cos\gamma$的最大值____ ...
- 洛谷P4234 最小差值生成树(LCT,生成树)
洛谷题目传送门 和魔法森林有点像,都是动态维护最小生成树(可参考一下Blog的LCT总结相关部分) 至于从小到大还是从大到小当然无所谓啦,我是从小到大排序,每次枚举边,还没连通就连,已连通就替换环上最 ...
- Linux下修改tomcat内存
由于服务器上放的tomcat太多,造成内存溢出. 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemo ...
- CodeSmith自己动手写模板
CodeSmith学习笔记------ 1.新建一个Code Smith Generator Template(C sharp) 2.一些常见标签的解释: ①外部变量: <%@ Property ...
- 解题:NOI 2009 诗人小G
题面 今天考试考了,于是开始糊学决策单调性DP 这是一个完全不会优化DP的人 决策单调性DP的一种优化方法是用单调队列优化 存下{左端点l,右端点r,最优决策点p}的三元组,按照单调队列的通常操作来说 ...
- 【CC】Batman and Tree
Portal --> CC Batman and Tree Solution 一开始看到很懵..感觉无从下手(因为自己太菜了qwq) 膜拜了题解之后发现好像并没有想象的那么复杂qwq 其 ...