C# 多线程的阻塞和继续-ManaulResetEvent的使用
在工作中,会遇到需要多线程处理相应的业务需求,最典型的包括Socket的通信。
多线程处理里,就会考虑到,哪个线程先运行,哪个线程后运行的情况。
这里我介绍一下,使用ManualResetEvent类来对线程进行阻塞和继续操作。
它有三个重要的方法:Reset、Set和WaitOne。
1、首先介绍一下它的构造函数:
public ManualResetEvent (bool initialState);
参数 initialState,如果为 true,则将初始状态设置为终止;如果为 false,则将初始状态设置为非终止。
这是什么意思呢?它的意思是:如果为 false时,初始化ManaulResetEvent对象为非终止状态,当有线程调用ManaulResetEvent的WaitOne()方法时,该线程将进入阻塞状态。
如果改为true,则会初始化ManaulResetEvent对象为终止状态,当有线程调用ManaulResetEvent的WaitOne()方法时,该线程可以继续执行后面的操作。
2、Reset()方法
Reset方法,它会将ManualResetEvent的对象设置为非终止状态,告诉调用ManaulResetEvent的WaitOne()方法的线程:此处将阻塞线程。
3、Set()方法
Set方法与Reset刚好相反,当有线程调用Set()方法时,它会告诉包含ManaulResetEvent的WaitOne()方法的线程:此处改为了终止状态,程序可以继续运行了。
C# 多线程的阻塞和继续-ManaulResetEvent的使用的更多相关文章
- UE4 Socket多线程非阻塞通信
转自:https://blog.csdn.net/lunweiwangxi3/article/details/50468593 ue4自带的Fsocket用起来依旧不是那么的顺手,感觉超出了我的理解范 ...
- 多线程-模拟阻塞queue队列
前阵子学习了多线程,现在进行总结一下,模拟队列. 分析问题: (1)首先需要一个容器存放元素,这里用linkedList队列. (2)每次像容器中添加或删除元素的时候需要计数,所以这里需要一个计数器, ...
- 29、Java并发性和多线程-非阻塞算法
以下内容转自http://ifeve.com/non-blocking-algorithms/: 在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法.在绝大多数项目中,在 ...
- Python中多线程的阻塞问题
在使用Queue模块+多线程模拟生产者+消费者问题时,遇到了一个小问题,现在记录下来.供可能会遇到类似问题的初学者们参考. 该问题的完整参考代码如下.主要实现了以下的功能:在一个线程中,开启生产者模式 ...
- Java多线程之阻塞I/O如何中断
阻塞的I/O线程在关闭线程时并不会被打断,需要关闭资源才能打断. 1.执行socketInput.close();阻塞可中断.2.执行System.in.close();阻塞没有中断. package ...
- Java多线程——可阻塞的队列BlockingQueue
阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同一方设置和释放信号量. ArrayBlockingQueue 只有put方法和ta ...
- Java多线程_阻塞队列
1.什么是阻塞队列 我们知道,PriorityQueue.LinkedList这些都是非阻塞队列.在我们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者- ...
- 嵌入式开发之精确延时---多线程延时阻塞精度asm("nop") nanosleep usleep sleep select
http://blog.csdn.net/lile777/article/details/45503087
- Python多线程中阻塞(join)与锁(Lock)的使用误区
参考资料:https://blog.csdn.net/cd_xuyue/article/details/52052893 1使用两个循环分别处理start和join函数.即可实现并发. threads ...
随机推荐
- SEVERE: Unable to process Jar entry [avassist xxxx.class]
<bean id="sqlSessionTemplate2" class="org.mybatis.spring.SqlSessionTemplate" ...
- 高通量计算框架HTCondor(四)——案例准备
目录 1. 正文 1.1. 任务划分 1.2. 任务程序 2. 相关 1. 正文 1.1. 任务划分 使用高通量计算第一步就是要针对密集运算任务做任务划分.将一个海量的.耗时的.耗资源的任务划分成合适 ...
- 如何用rflask快速初始化Flask Restful项目
如何用rflask快速初始化Flask Restful项目 说明 多啰嗦两句 我们在创建flask项目的时候,使用pycharm创建出来的项目比较简陋,而且随着项目的功能完善,项目目录结构会比较多,多 ...
- 使用telnet连接redis
平时连接redis用的是官方客户端redis-cli, 使用redis-cli最常用的几个参数如下: -h <hostname> Server hostname (default: 127 ...
- 创建认证提供器 安全性与收尾工作 精通ASP-NET-MVC-5-弗瑞曼
- PyCharm2019.3.2专业版激活
PyCharm2019.3.2专业版激活 Ryan 蚂蚁小黑 PyCharm 专业版激活 今天是除夕,在这阖家团圆的日子里,祝大家新春快乐,鼠年大吉,愿大家在新的一年里身体健康,万事如意! 新的一年 ...
- Can you answer these queries III(线段树)
Can you answer these queries III(luogu) Description 维护一个长度为n的序列A,进行q次询问或操作 0 x y:把Ax改为y 1 x y:询问区间[l ...
- centos MySQL安装与卸载
1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:https://dev.mysql.com/downloads/repo/yum/ wget http://dev.mysql.com/g ...
- python(从放弃到从头开始)
本节内容 Python介绍 发展史 Python 2 or 3? Hello World程序 变量 用户输入 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语句 表达式for ...
- C# list中ConvertAll的使用
static double TakeSquareRoot(int x) { //return Math.Sqrt(x); ; } static void Main(string[] args) { L ...