《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:多线程编程模型
多线程编程模型 线程安全名词 串行.并发和并行 串行:一个人,将任务一个一个完成 并发:一个人,有策略地同时做多件事情 并行:多个人,每人做一个事情 竞态 名词 竞态:计算结果的正确性与时间有关的现象 ...
随机推荐
- python学习(七) 更加抽象
python是面向对象的语言. 7.1 对象的魔力 7.1.1 多态 不管是字符串还是列表,count()函数都可以正常工作. >>> ['ab','b','c'].count('c ...
- window下配置Solr6.5以及IK Analyzer分词配置
一.安装准备及各软件使用版本说明: 1.下载jdk,我下载的版本是jdk-8u121-windows-x64.exe,下载地址: http://www.oracle.com/technetwork/j ...
- flask系列六之模型分文件
1.分开models的目的:为了让代码更加方便的管理. 2.如何解决循环引用:把db放在一个单独的文件中,切断循环引用的线条就可以了. (1)避免循环引用 解决循环引用 主文件:main.py fro ...
- 【开发工具】最强Git使用总结
目录 必读材料 常用小结 Git操作流程 Git常用操作命令 - 代码提交和同步代码 Git常用操作命令 - 代码撤销和撤销同步 Git常用操作命令 - 其它常用命令 Git是分布式代码托管的标杆,这 ...
- ffmpeg转码flv到avi《转》
一个视频转码器,则需要对视频进行解码,然后再对视频进行编码,因而相当于解码器和编码器的结合. 下面图列举了一个视频的转码流程. 输入的视频封装格式是flv 视频编码标准是H.264 音频编码标准是AA ...
- Python基础学习六 操作MySQL
python操作数据库,需要先安装模块 1.下载MySQL.Redis模块 2.解压后,在当前目录执行 python setup.py install 3.或是pycharm直接选择安装 import ...
- coprime Sequence
Do you know what is called ``Coprime Sequence''? That is a sequence consists of nn positive integers ...
- java StirngStringbufferStringbuild的区别
java StirngStringbufferStringbuild的区别 String 1,Stirng是对象不是基本数据类型 2,String是final类,不能被继承.是不可变对象,一旦创建, ...
- 读excle
1.OleDbConnection读取Excel ///<summary>///上传文件到临时目录中 ///</ummary>private void Upload(){ Ht ...
- XML数据格式简介
---------------siwuxie095 XML 简介 XML,即 可扩展标记语言(Extensible Markcup La ...