一个实例明白AutoResetEvent和 ManulResetEvent的用法 - Kevin Gao

kevinGao 2021-08-09 原文


一个实例明白AutoResetEvent和 ManulResetEvent的用法

先看一段代码:
public class WaitHandlerExample {
                public static AutoResetEvent waitHandler;
                public static ManualResetEvent manualWaitHandler;

                public static void ThreadPoolMain() {
                        waitHandler = new AutoResetEvent(false);
                        manualWaitHandler = new ManualResetEvent(false);

                        // Queue the task.
                        ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));            
                        ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc2));

                        Console.WriteLine(“Main thread does some work, then waiting….”);
                        manualWaitHandler.WaitOne();
                        //waitHandler.Reset();
                        manualWaitHandler.WaitOne();
                        //waitHandler.Reset();
                        Console.WriteLine(“Main thread exits.”);
                }

                // This thread procedure performs the task.
                public static void ThreadProc(Object stateInfo) {
                        Thread.Sleep(1000);
                        Console.WriteLine(“Hello from the thread pool.”);
                        //waitHandler.Set();        //
                        manualWaitHandler.Set();//过去了,但是没关,也就是说 信号还是开着的。
                        //manualWaitHandler.Reset();
                }
                public static void ThreadProc2(object stateInfo) {
                        Thread.Sleep(100);
                        Console.WriteLine(“Hello from the thread Pool2”);
                        //waitHandler.Set();
                        manualWaitHandler.Set();//过去了,但是没有关
                }
        }
如果把 AutoResetEvent 比作 北京地铁的门闸,那么
AutoResetEvent waitHandler=new AutoResetEvent(false);
可以看作,初始化闸机口为关闭状态,
waitHandler.WaitOne();
可以看作刷卡
waitHandler.Set()
表示通过,并且闸机自动关闭(AutoReset)为下次通过做准备。他的一个重大的好处,就是线程只能一个一个通过,保持了顺序又避免了死锁。
 
如果使用manualResetEvent 呢,那么在waitHandler.Set 之后,必须调用Reset()方法,为下面一位进去做好准备, 否则,就相当于无法再次刷卡。
 
体现在程序中就是,AutoResetEvent 可以WaitOne 很多次,可是ManualResetEvent 如果不Reset 下次就不能使用. 这就是他们的区别。

本文出自 “Xhinker” 博客,转载请与作者联系!

转帖:http://xhinker.blog.51cto.com/640011/180377

发表于
2011-11-29 16:32 
Kevin Gao 
阅读(263
评论(0
编辑 
收藏 
举报

 

版权声明:本文为kevinGao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kevinGao/archive/2011/11/29/2270745.html

一个实例明白AutoResetEvent和 ManulResetEvent的用法 - Kevin Gao的更多相关文章

  1. spark 源码分析之二十 — Stage的提交

    引言 上篇 spark 源码分析之十九 — DAG的生成和Stage的划分 中,主要介绍了下图中的 […]...

  2. 推卡:“积分侠”的福利 广发DIY信用卡 – lcs-帅

    推卡:“积分侠”的福利 广发DIY信用卡   广发diy信用卡最大的优势在持卡人在三大类商户刷卡消费可享受3倍 […]...

  3. 存储过程参数传递 – judy_ma0605

    存储过程参数传递 http://www.cnblogs.com/double-K/p/6203202.html […]...

  4. excel表格内换行 – 月未央

    excel表格内换行  一、自动换行的方法。  选中要换行的单元格,单击格式菜单,选择单元格命令,然后选择对齐 […]...

  5. 中国需要\”交互设计师\” – 听棠.NET

    点击图片可查看详细 (很幸运哦,好象发了我这本书以后,china-pub就绝版了)  本文讨论的是” […]...

  6. 安装屏保软件(Linux终端演示 “黑客帝国” 字母雨界面)和Linux修改管理员密码 – Tom-shushu

    安装屏保软件(Linux终端演示 “黑客帝国” 字母雨界面)和Linux修改管理员密码 1.Linux修改管理 […]...

  7. SpringBoot(十一)– 动态数据源

    SpringBoot中使用动态数据源可以实现分布式中的分库技术,比如查询用户 就在用户库中查询,查询订单 就在 […]...

  8. SVN中文网 – svn安装、svn部署、svn操作手册

    http://www.svn.org.cn/...

随机推荐

  1. Pytorch 训练框架,日志管理,可视化

    torchfurnace torchfurnace 是一个集快速训练模型,日志管理,模型checkpoints […]...

  2. 数据结构 | 双向链表简单实现及图示

    双向链表的优势在于插入删除不需要移动元素外,可以原地插入删除,可以双向遍历 ————————————————— […]...

  3. 移动审批工作流设计与实现

    在企业中,大部分重要的业务需要进行审批,由于具有决定权的领导者事务繁忙或者受环境或低于限制,没法通过互联网进行 […]...

  4. 神经网络与机器学习第一讲绪论

    神经网络与机器学习 本讲稿材料都是来源各种书籍和网站,只是有些问题用matlab(后期计划用Python)程序 […]...

  5. python django与celery的集成

    我来看一下celery集成到django后的整个工作链:django将任务转发给消息队列,celery读取到任 […]...

  6. java 编写小工具 尝试 学习(一) – 所长

    java 编写小工具 尝试 学习(一) 1、单片机 调试经常 需要  用 串口 工具 发送 一些 特定的  协 […]...

  7. 不写一行代码,利用常用工具和软件批量下载URL资源 – Beta-TNT

    有时候会遇到这种情况:想从某个网站下载一批东西,目标URL是比较规整的,而且结构都一样(仅某些字段不同)。但又 […]...

  8. Go 编码问题的解决方案

    1.首先需要mahonia 这个包 1 go get github.com/axgle/mahonia 然后新 […]...

展开目录

目录导航