这个有点像是缩小版的mutex

还是很好理解的

相对mutex 使用的范围可能比较小一点。

 class Program
{
static AutoResetEvent work = new AutoResetEvent(false);
static AutoResetEvent main = new AutoResetEvent(false);
static void P(int s)
{
Console.WriteLine($"第二线程要等待{s}");
Thread.Sleep(TimeSpan.FromSeconds(s));
Console.WriteLine("第二线程等待结束");
work.Set();//告诉work 不用等待
Console.WriteLine("等待主线程完成工作");
main.WaitOne();//main 堵塞
Thread.Sleep(TimeSpan.FromSeconds(s));
Console.WriteLine("第二线程结束");
work.Set();//不用等待
}
static void Main(string[] args)
{
var t = new Thread(() => P());
t.Start();
Console.WriteLine($"等待别的线程完成工作");
work.WaitOne();//设置work等待
Console.WriteLine("设置work线程等待");
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine("主线程等待5s 已经结束");
main.Set();//告诉main 不用等待
work.WaitOne();//告诉 work要等待
Console.WriteLine("主线程结束");
Console.ReadKey();
}
}

一般来说就是

在实例化的时候,要设置为false  如果为true 那waiteone就不会有效果。

其次 waiteone就是要堵塞,等待。

set就是发出解锁信号,让AutoResetEvent不再等待。

也是非常好理解的。

下面的例子是当实例化时 传入true时 为何waiteOne不再起效

static AutoResetEvent main = new AutoResetEvent(true);

static void Main(string[] args)
{
if( main.WaitOne(, false))
{
Console.WriteLine("如果实例化AutoRecstEnvet向构造函数中传递true时 WaiteOne不会等待");
}
else
{
main.Set();
Console.WriteLine("所以直接解锁");
}
Console.ReadKey();
}

也就是当 实例化为true waiteone第一次时无法起效。

剩下的用法语也是相当简单的。

不过这个AutoResetEvent是无法用到进程之间的。

而且学习这个可以有助于理解Metux 的使用方式。

《C#多线程编程实战》2.5 AutoResetEvent的更多相关文章

  1. C#多线程编程实战(二)

    1.1 简介 为了防止一个应用程序控制CPU而导致其他应用程序和操作系统本身永远被挂起这一可能情况,操作系统不得不使用某种方式将物理计算分割为一些虚拟的进程,并给予每个执行程序一定量的计算能力.此外操 ...

  2. Java多线程编程实战读书笔记(一)

    多线程的基础概念本人在学习多线程的时候发现一本书——java多线程编程实战指南.整理了一下书中的概念制作成了思维导图的形式.按照书中的章节整理,并添加一些个人的理解.

  3. Java多线程编程实战指南(核心篇)读书笔记(五)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  4. Java多线程编程实战指南(核心篇)读书笔记(四)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  5. Java多线程编程实战指南(核心篇)读书笔记(三)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  6. Java多线程编程实战指南(核心篇)读书笔记(二)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  7. Java多线程编程实战指南(核心篇)读书笔记(一)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  8. ASP.Net教程系列:多线程编程实战(一)

    Web开发中使用多线程可以增强用户体验,尤其是多用户.多任务.海量数据和资源紧张的情况下.所以我们的ASP.Net教程设立多线程编程实战专题.下面这些代码范例都是入门级的,希望对对大家学习ASP.Ne ...

  9. 《Java多线程编程实战指南(核心篇)》阅读笔记

    <Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...

  10. Java多线程编程实战02:多线程编程模型

    多线程编程模型 线程安全名词 串行.并发和并行 串行:一个人,将任务一个一个完成 并发:一个人,有策略地同时做多件事情 并行:多个人,每人做一个事情 竞态 名词 竞态:计算结果的正确性与时间有关的现象 ...

随机推荐

  1. 怎么样使用yum来安装mysql

    linux下使用yum安装mysql,以及启动.登录和远程访问. 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没 ...

  2. Unity3D Demo

    之前在Unity讨论Q群里总是有不少同学求项目资源和源码神马的,其实这种资源在官网很多,而且都比较规范和专业,很有参考价值,链接:https://www.assetstore.unity3d.com/ ...

  3. Deep Learning(深度学习)学习笔记整理系列

    http://blog.csdn.net/zouxy09/article/details/8775360 http://blog.csdn.net/zouxy09/article/details/87 ...

  4. leetcode696

    本题先寻找字符串中0变1,或者1变0的位置作为分隔位置.然后从这个分隔位置同时向左.右两侧搜索. 找到的左连续串和右连续串,都进行累计. public class Solution { public ...

  5. spring集成Redis(单机、集群)

    一.单机redis配置 1. 配置redis连接池 <bean id="jedisPoolConfig" class="redis.clients.jedis.Je ...

  6. 2-1 CPU多级缓存-缓存一致性.mkv

  7. 刷题向》图论》BZOJ1179 关于tarjan和SPFA的15秒(normal)

    这道题可以考察图论的掌握程度(算半道水题) 题目如下 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i ...

  8. 【bzoj1444】[Jsoi2009]有趣的游戏

    1444: [Jsoi2009]有趣的游戏 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1007  Solved: 334[Submit][Statu ...

  9. Linux下cacti的安装

    Cacti安装手册 第一步.  Cacti的架构 第二步. Cacti的工作流程 第三步. Cacti简介 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用r ...

  10. CSS 伪类与伪元素

    CSS的元素选择器除了根据id(#).class(.).属性([ ])选取元素以外,还有很重要的一类,就是根据元素的特殊状态来选取元素.它们就是伪类和伪元素.跟id选择器.类选择器.属性选择器以及派生 ...