《C#多线程编程实战》2.6 ManualResetEventSlim
这个比较好理解的。
正如书上所言,如同一直在打开的大门的屋子,谁要进去,谁就自己的关门,出来的时候在开开。
常用的方法 有三个:
Set() //设置为有信号,也就是让等待的线程不用继续等待,唤醒等待的线程。
Reset() //设置为 无信号 也就是让没有等待的线程变成需要等待的状态,需要配合Wait的方法。
Wait()//等待,堵塞线程,除非接受信号【set方法】才会释放
那么书上的例子:
class Program
{
static void Test(string threadName,int seconds)
{
Console.WriteLine($"{threadName} falls to sleep");
Thread.Sleep(TimeSpan.FromSeconds(seconds));
Console.WriteLine($"{threadName} waits for the gates to open");
_mainEvent.Wait(); Console.WriteLine($"{threadName} enters the gats");
}
static ManualResetEventSlim _mainEvent = new ManualResetEventSlim(false);
static void Main(string[] args)
{
var t1 = new Thread(() => Test("Thread 1", ));
var t2 = new Thread(() => Test("Thread 2", ));
var t3 = new Thread(() => Test("Thread 3", ));
t1.Start();
t2.Start();
t3.Start();
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine("the gates are now open");
_mainEvent.Set();
Thread.Sleep(TimeSpan.FromSeconds());
_mainEvent.Reset(); Console.WriteLine("the gates have been closed!");
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine("the fatres are now ioen for the second time !");
_mainEvent.Set();
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine("the gates have been closed");
_mainEvent.Reset();
Console.ReadKey(); }
}
运行 起来 ,再配合书上的解读。
稍微思考一下 还是很好理解的。
就是干什么事情,会比较麻烦,但是对线程的每一步都会全面的掌握。
初始化为false时
一般运行顺序就是
Reset()//设置需要等待
Wait()//实际等待
Set()//释放线程
一般来说 在初始化ManualResetEventSlim都是false。
如果是true,必须手动设置Reset一次。
《C#多线程编程实战》2.6 ManualResetEventSlim的更多相关文章
- C#多线程编程实战(二)
1.1 简介 为了防止一个应用程序控制CPU而导致其他应用程序和操作系统本身永远被挂起这一可能情况,操作系统不得不使用某种方式将物理计算分割为一些虚拟的进程,并给予每个执行程序一定量的计算能力.此外操 ...
- Java多线程编程实战读书笔记(一)
多线程的基础概念本人在学习多线程的时候发现一本书——java多线程编程实战指南.整理了一下书中的概念制作成了思维导图的形式.按照书中的章节整理,并添加一些个人的理解.
- Java多线程编程实战指南(核心篇)读书笔记(五)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(四)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(三)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- ASP.Net教程系列:多线程编程实战(一)
Web开发中使用多线程可以增强用户体验,尤其是多用户.多任务.海量数据和资源紧张的情况下.所以我们的ASP.Net教程设立多线程编程实战专题.下面这些代码范例都是入门级的,希望对对大家学习ASP.Ne ...
- 《Java多线程编程实战指南(核心篇)》阅读笔记
<Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...
- Java多线程编程实战02:多线程编程模型
多线程编程模型 线程安全名词 串行.并发和并行 串行:一个人,将任务一个一个完成 并发:一个人,有策略地同时做多件事情 并行:多个人,每人做一个事情 竞态 名词 竞态:计算结果的正确性与时间有关的现象 ...
随机推荐
- jenkins学习(1)
(1) 按照JAVA, 增加环境变量JAVA_HOME = C:\Program Files\Java\jdk1.8.0_31 增加环境变量CLASS_PATH = ...
- Py修行路 python基础 (七)文件操作 笔记(随时更改添加)
文件操作流程: 1.打开文件 open() 2.操作文件 read .writeread(n) n对应读指定个数的 2.x中读取的是字节! 3.x中读取的是字符!read 往外读取文件,是以光标位置开 ...
- Py修行路 python基础 (十九)面向对象进阶(下)
item系列 __slots__方法 __next__ 和 __iter__实现迭代器 析构函数 上下文管理协议 元类一.item系列 把对象操作属性模拟成字典的格式. 例如:对象名['key'] ...
- leetcode454
public class Solution { public int FourSumCount(int[] A, int[] B, int[] C, int[] D) { var dic = new ...
- MSComm 串口
MSComm 串口 http://www.docin.com/p-761416611.html http://blog.sina.com.cn/s/blog_50cfd0fc0102v27p.html
- 【285】ArcPy 暗色窗体设置
预览图 设置如下 Default:
- itemize,enumerate,description 用法【LaTeX 使用】
itemize和enumerate还有description 是LaTeX里列举的三种样式,分别讲一些使用技巧.itemize(意为分条目):\begin{itemize}\item[*] a\ite ...
- Unity抗锯齿的设置
[Unity抗锯齿的设置] "Edit"->"Project Settings"->"Quality",可以质量设置Inspec ...
- 安装gdb insight(6.8.1)
如果之前安装过6.8或其它版本,请先删除以下目录 rm -rf /usr/local/insight rm -rf /usr/share/tcltk 如果之前设置过环境变量,也请删除 unset TC ...
- 关于使用sessionStorage报SecurityError错误的问题
localStorage 永久保存 不同页面和标签页可以共享 关闭浏览器不会清除 sessionStorage 会话保存 不同页面和标签页不能共享 关闭浏览器会清除 遇到的问题:在firefox中报S ...