C# AutoResetEvent / ManualResetEvent
个人理解这个应该就相当于一个旗标,在不同线程之间创建一个都可以使用的bool量
AutoResetEvent 常常被用来在两个线程之间进行信号发送,两个线程共享相同的AutoResetEvent对象,线程可以通过调用AutoResetEvent对象的WaitOne()方法进入等待状态,waitone可以有一个等待时间参数,然后另外一个线程通过调用AutoResetEvent对象的Set()方法取消等待的状态,通过reset()恢复
class Program{const int count = 10;//赋值为false也就是没有信号static AutoResetEvent myResetEvent = new AutoResetEvent(false);static int number;static void Main(string[] args){Thread thread = new Thread(funThread);thread.Name = "QQ";thread.Start();for (int i = 1; i < count; i++){Console.WriteLine("first number: {0}",i);number = i;//这里是设置为有信号myResetEvent.Set();Thread.Sleep(2000);}thread.Abort();}static void funThread(){while (true){//执行到这个地方时,会等待set调用后改变了信号才接着执行myResetEvent.WaitOne();Console.WriteLine("end {0} number: {1}", Thread.CurrentThread.Name, number);}}}
ManualResetEvent的使用和效果和AutoResetEvent是一样的,不同的是AutoResetEvent set后,当某个线程里有waitone接受后,autorestevent又变成set之前的状态,即其他线程的waitone仍在等待,而manualrestevent set之后,其他线程的waitone都不在等待,除非手动调用manualresetevent的Reset()。
参考:
https://www.cnblogs.com/fangyz/p/5040206.html
C# AutoResetEvent / ManualResetEvent相关推荐
- autoresetevent java_[原创]AutoResetEvent, ManualResetEvent的Java模拟
AutoResetEvent, ManualResetEvent是C#中常用的线程同步方法,在Java中可以模拟,AutoResetEvent使用Semaphore,增加的是许可证数量,程序里只有一个 ...
- C# 线程的挂起与唤醒 (AutoResetEvent,ManualResetEvent)
如果说C#和C++有什么不同,博主不得不说,对于异步的支持程度是C#的一一个伟大的进步. 其实早期的C++都没有异步,并发的概念.博主第一次使用C++创建异步程序的时候,是使用boost库的内容进行实 ...
- .NET AutoResetEvent ManualResetEvent 信号机制以及Semaphore
1.当多个线程在等待一个 AutoResetEvent的时候,每次调用AutoResetEvent.Set()方法只会唤醒一个线程 2.当多个线程在等待一个ManualResetEvent的时候,每次 ...
- 【深度好文】多线程之WaitHandle--派生EventWaitHandle事件构造-》AutoResetEvent、ManualResetEvent...
AutoResetEvent/ManualResetEvent 都是继承自 EventWaitHandle ,EventWaitHandle继承自WaitHandle. 在讨论这个问题之前,我们先了解 ...
- CLR Via C# 3rd 阅读摘要 -- Chapter 28 – Primitive Thread Synchronization Constructs
Class Libraries and Thread Safety 线程同步是用来避免多个线程同时访问共享数据时出现冲突: 线程同步的障碍: 1.极其乏味易错: 2.锁严重影响性能: 3.线程同步锁在 ...
- 细说C#多线程那些事 - 线程同步和多线程优先级
上个文章分享了一些多线程的一些基础的知识,今天我们继续学习. 一.Task类 上次我们说了线程池,线程池的QueueUserWorkItem()方法发起一次异步的线程执行很简单 但是该方法最大的问题是 ...
- C# 实现多线程的同步方法详解
本文主要描述在C#中线程同步的方法.线程的基本概念网上资料也很多就不再赘述了.直接接入 主题,在多线程开发的应用中,线程同步是不可避免的.在.Net框架中,实现线程同步主要通过以下的几种方式来实现,在 ...
- 【转】1.4异步编程:轻量级线程同步基元对象
开始<异步编程:同步基元对象(下)> 示例:异步编程:轻量级线程同步基元对象.rar 在<异步编程:线程同步基元对象>中我介绍了.NET4.0之前为我们提供的各种同步基元(包括 ...
- 【转】1.3异步编程:线程同步基元对象
开始<异步编程:同步基元对象(上)> 示例:异步编程:线程同步基元对象.rar 如今的应用程序越来越复杂,我们常常需要多线程技术来提高我们应用程序的响应速度.每个线程都由自己的线程ID,当 ...
最新文章
- JakartaEE Exception: Invalid bound statement (not found): com.mazaiting.blog.dao.UserDao.selectUs...
- 哈希函数的原理及应用
- MVC基于角色权限控制--用户管理
- 全国计算机一级wps网络,全国计算机一级《WPS》考试试题及答案
- 论:CMMI项目策划方法(PP)
- android studio——替换全局的某个字符串
- Android开发面试题之Activity启动模式讲解总结
- JAVA 基础3-数组
- php获取当前世界,php获取网站alexa世界流量排名代码
- php追加数据,php追加数据到mysql
- python字典的内置函数_python – 用于字典转换的特殊方法名称的内置函数
- 管理活动目录域服务实训_2019级酒店管理专业前厅与客房服务校外课程实训总结篇...
- 使用Spring框架实现数据库事务处理
- java线程池1001java线程池_深入浅出Java(Android )线程池ThreadPoolExecutor
- java数组元素的默认值_数组元素默认的初始值都是什么?
- [JNI] 开发基础(5)内存分配
- 计算机网络实验2-二层交换机的基本配置(eNSP)
- 软件随想录(local.joelonsoftware.com/wiki)-2001年04月21日 别让架构太空人吓到你 - Don't Let Architecture Astronauts Scar
- 午夜与element-ui邂逅
- 企业未来的发展机遇,或许在直播中