《C#多线程编程实战》2.5 AutoResetEvent
这个有点像是缩小版的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的更多相关文章
- 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:多线程编程模型
多线程编程模型 线程安全名词 串行.并发和并行 串行:一个人,将任务一个一个完成 并发:一个人,有策略地同时做多件事情 并行:多个人,每人做一个事情 竞态 名词 竞态:计算结果的正确性与时间有关的现象 ...
随机推荐
- 25 mysql怎么保证高可用
上一篇介绍了binlog的基本内容,在主备关系中,是每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有的binlog,都可以传到备库并被正确执行,备库就能跟主库一致的状态, ...
- Cookie操作类、 包括创建、读取、修改、获取、销毁cookie
Cookie操作类. 包括创建.读取.修改.获取.销毁cookie import java.util.Hashtable; import java.util.Iterator; import java ...
- javascript第三节
面向对象的程序设计 1.属性类型 ECMAScript中有两种属性:数据属性和访问器属性 数据属性: configurable设置为false,表示不能从对象中删除属性. 访问器属性: 支持定义多个属 ...
- 虚拟机之 Wordpress博客搭建
WordPress博客需要LAMP环境,--- LAMP 官网:https://cn.wordpress.org/ wordpress-4.4.1版本环境要求是: php 5.2.4或以上 mysq ...
- mixer音量的设置:amixer小工具的…
1.关于alsa-utils和lib的移植我的上一篇博文中已经说明了,下面我就来说说我的混音器mixer音量控制的调节过程,网上的很多方法都是比较基本的入门没有知名具体的操作方法,在此我来谈谈我的设置 ...
- OpenGL ES & SDL(转载)
原帖:http://qqwt.blog.sohu.com/91060365.html 这个学期在学习嵌入式,由于老师的高要求.所以我们几个水手必须要完成一个项目,名字就叫OpenGL ES & ...
- C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?
C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?这是一个很常见的命题,以前也没有注意,今天QQ群里有人提起,于是就做了下试验,代码如下: using System; u ...
- 【原创】5. MYSQL++ mysql_type_info类型
该类型是SQLBuffer的灵魂,它用来表示从SQL TYPE到C++ TYPE的相互转变.该类型被定义在type_info.h中.在这个头文件中,其实定义了三个类型,其中前两个都是在mysql_ty ...
- 1 JPA入门----项目搭建以及CRUD
maven搭建JPA开发环境 1 依赖的maven pom文件 主要有hibernate-core.hibernate-entitymanager.javax-persistence.mysq ...
- SSH隧道技术简介
本文的受众如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写程序,查数据,下电影). 公司为了防止我们用XX软件封锁了它的端口或者服务器地 ...