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

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

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

2.6 使用ManualResetEventSlim类

本节将描述如何使用ManualResetEventSlim类来在线程间以更灵活的方式传递信号。

2.6.1 准备工作

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

2.6.2 实现方式

请执行以下步骤来了解ManualResetEventSlim类的使用方法:

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

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

fa5f5be508cd6c02ac6c88c96ae12eafb1a57191

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

4f107c2362c89d1cd0496ebceeffa57659b7db0b

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

aa99ed6b5be0f2af72085696b5e292a8ef37e8ff

5.运行程序。

2.6.3 工作原理

当主程序启动时,首先创建了ManualResetEventSlim类的一个实例。然后启动了三个线程,等待事件信号通知它们继续执行。

ManualResetEvnetSlim的整个工作方式有点像人群通过大门。2.5节中讨论过的AutoResetEvent事件像一个旋转门,一次只允许一人通过。ManualResetEventSlim是Manual-ResetEvent的混合版本,一直保持大门敞开直到手动调用Reset方法。当调用_mainEvent.Set时,相当于打开了大门从而允许准备好的线程接收信号并继续工作。然而线程3还处于睡眠状态,没有赶上时间。当调用_mainEvent.Reset相当于关闭了大门。最后一个线程已经准备好执行,但是不得不等待下一个信号,即要等待好几秒钟。

2.6.4 更多信息

在前面某小节中,我们使用了一种无法在操作系统层面工作的混合模式。如果我们需要全局事件,则可以使用EventWaitHandle类,其是AutoResetEvent和ManualResetEvent类的基类。

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

你可能感兴趣的文章
Callable和Future
查看>>
少用数字来作为参数标识含义
查看>>
ScrollView中嵌套ListView
查看>>
Algs4-2.3.1如何切分数组
查看>>
观察者模式
查看>>
在properties.xml中定义变量,在application.xml中取值问题
查看>>
cell reuse & disposebag
查看>>
【故障处理】ORA-12545: Connect failed because target host or object does not exist
查看>>
js判断移动端是否安装某款app的多种方法
查看>>
学习angularjs的内置API函数
查看>>
4、输出名称 Exported names
查看>>
Pre-echo(预回声),瞬态信号检测与TNS
查看>>
【转载】如何发送和接收 Windows Phone 的 Raw 通知
查看>>
poj2378
查看>>
Java文件清单列表
查看>>
js url传值中文乱码之解决之道
查看>>
Trusty TEE
查看>>
[LeetCode] Reverse String 翻转字符串
查看>>
学习iOS【3】数组、词典和集合
查看>>
Hessian 原理分析--转
查看>>