博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C#多线程编程实战(原书第2版)》——2.5 使用AutoResetEvent类
阅读量:6097 次
发布时间:2019-06-20

本文共 1016 字,大约阅读时间需要 3 分钟。

本节书摘来自华章出版社《C#多线程编程实战(原书第2版)》一书中的第2章,第2.5节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.5 使用AutoResetEvent类

本节中的示例借助于AutoResetEvent类来从一个线程向另一个线程发送通知。AutoResetEvent类可以通知等待的线程有某事件发生。

2.5.1 准备工作

为了学习本节,你需要安装Visual Studio 2015。除此之外无需其他准备。本节的源代码放置在BookSamplesChapter2Recipe4目录中。

2.5.2 实现方式

请执行以下步骤来了解如何借助AutoResetEvent类从一个线程中向另一个线程发送通知:

1.启动Visual Studio 2015。新建一个C#控制台应用程序项目。

2.在Program.cs文件中加入以下using指令:

f3c8a5cfa115a4db1f17b9e4f7b418b532b26279

3.在Main方法下面加入以下代码片段:

c95b986009f2a648757552b66eaec4677c978b8a

4.在Main方法中加入以下代码片段:

dc53b1a91342af567648f252428bef604a646949
7f288adc38d251bd2d7f60bd0138cf05e6745626

5.运行程序。

2.5.3 工作原理

当主程序启动时,定义了两个AutoResetEvent实例。其中一个是从子线程向主线程发信号,另一个实例是从主线程向子线程发信号。我们向AutoResetEvent构造方法传入false,定义了这两个实例的初始状态为unsignaled。这意味着任何线程调用这两个对象中的任何一个的WaitOne方法将会被阻塞,直到我们调用了Set方法。如果初始事件状态为true,那么AutoResetEvent实例的状态为signaled,如果线程调用WaitOne方法则会被立即处理。然后事件状态自动变为unsignaled,所以需要再对该实例调用一次Set方法,以便让其他的线程对该实例调用WaitOne方法从而继续执行。

然后我们创建了第二个线程,其会执行第一个操作10秒钟,然后等待从第二个线程发出的信号。该信号意味着第一个操作已经完成。现在第二个线程在等待主线程的信号。我们对主线程做了一些附加工作,并通过调用_mainEvent.Set方法发送了一个信号。然后等待从第二个线程发出的另一个信号。

AutoResetEvent类采用的是内核时间模式,所以等待时间不能太长。使用2.6节中的ManualResetEventslim类更好,因为它使用的是混合模式。

转载地址:http://fyzza.baihongyu.com/

你可能感兴趣的文章
Fabric CA环境的集成
查看>>
关于HTTP协议你需要知道这些
查看>>
一步步搭建物联网系统——GNU/Linux 强大且Free
查看>>
NoSQL应用征文大赛,赢取iPhone6和火星车!
查看>>
Docker集中化web界面管理平台shipyard
查看>>
「诚挚出新」LeanCloud 前所未有的变化
查看>>
题解 CF520E 【Pluses everywhere】
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
人类的目标
查看>>
阿里安全资深总监张玉东解读安全技术9大新趋势
查看>>
scala 小结(一)
查看>>
索尼将出售电池业务 未来或投资人工智能等新兴技术领域
查看>>
甲骨文宣布在亚太区推出重要销售转型战略,全面拓展云业务
查看>>
创建 ECS 支持使用镜像预设密码
查看>>
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)...
查看>>
特斯拉又创新举,太阳能电场为Gigafactory电池工厂供电
查看>>
finally关键字小复习
查看>>
[Spring]01_环境配置
查看>>
用AliOS Things在Developer Kit 上点亮一个LED
查看>>
Hadoop集群nodes unhealthy解决方法
查看>>