在工作中,会遇到需要多线程处理相应的业务需求,最典型的包括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的使用的更多相关文章

  1. UE4 Socket多线程非阻塞通信

    转自:https://blog.csdn.net/lunweiwangxi3/article/details/50468593 ue4自带的Fsocket用起来依旧不是那么的顺手,感觉超出了我的理解范 ...

  2. 多线程-模拟阻塞queue队列

    前阵子学习了多线程,现在进行总结一下,模拟队列. 分析问题: (1)首先需要一个容器存放元素,这里用linkedList队列. (2)每次像容器中添加或删除元素的时候需要计数,所以这里需要一个计数器, ...

  3. 29、Java并发性和多线程-非阻塞算法

    以下内容转自http://ifeve.com/non-blocking-algorithms/: 在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法.在绝大多数项目中,在 ...

  4. Python中多线程的阻塞问题

    在使用Queue模块+多线程模拟生产者+消费者问题时,遇到了一个小问题,现在记录下来.供可能会遇到类似问题的初学者们参考. 该问题的完整参考代码如下.主要实现了以下的功能:在一个线程中,开启生产者模式 ...

  5. Java多线程之阻塞I/O如何中断

    阻塞的I/O线程在关闭线程时并不会被打断,需要关闭资源才能打断. 1.执行socketInput.close();阻塞可中断.2.执行System.in.close();阻塞没有中断. package ...

  6. Java多线程——可阻塞的队列BlockingQueue

    阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同一方设置和释放信号量. ArrayBlockingQueue 只有put方法和ta ...

  7. Java多线程_阻塞队列

    1.什么是阻塞队列       我们知道,PriorityQueue.LinkedList这些都是非阻塞队列.在我们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者- ...

  8. 嵌入式开发之精确延时---多线程延时阻塞精度asm("nop") nanosleep usleep sleep select

    http://blog.csdn.net/lile777/article/details/45503087

  9. Python多线程中阻塞(join)与锁(Lock)的使用误区

    参考资料:https://blog.csdn.net/cd_xuyue/article/details/52052893 1使用两个循环分别处理start和join函数.即可实现并发. threads ...

随机推荐

  1. 深入学习MySQL 01 一条查询语句的执行过程

    在学习SpringCloud的同时,也在深入学习MySq中,听着<mysql45讲>,看着<高性能MySQL>,本系列文章是本人学习过程的总结,水平有限,仅供参考,若有不对之处 ...

  2. git使用中遇到的问题

    1.拉取时报错:Permission denied (publickey) 先检查一下你的乌龟设置是否用的不是乌龟自己的SSH 2.TortoiseGit报错: Couldn’t load this ...

  3. 2019中国大学生程序设计竞赛-女生专场(重现赛)部分题解C-Function(贪心+优先队列) H-clock(模拟)

    Function 题目链接 Problem Description wls 有 n 个二次函数 Fi(x) = aix2 + bix + ci (1 ≤ i ≤ n). 现在他想在∑ni=1xi = ...

  4. SpringBoot学习(一):SpringBoot入门

    1.Spring Boot 简介 1) 简化Spring应用开发的一个框架: 2) 整个Spring技术栈的一个大整合: 3) J2EE开发的一站式解决方案: 2.微服务 2014,martin fo ...

  5. 转载: Java虚拟机:运行时内存数据区域、对象内存分配与访问

    转载:  https://blog.csdn.net/a745233700/article/details/80291694  (虽然大部分内容都其实是深入理解jvm虚拟机这本书里的,不过整理的很牛逼 ...

  6. Servlet概念及配置

    Servlet 简介: servlet就是sun公司开发动态web的一门技术 Sun在这些API中提供一个接口叫做:Servlet,如果逆向开发一个Servlet程序,只需要完成两个小步骤: 1.编写 ...

  7. Oracle 数据泵(IMPDP/EXPDP)导入导出总结

    Oracle数据泵导入导出是日常工作中常用的基本技术之一,它相对传统的逻辑导入导出要高效,这种特性更适合数据库对象数量巨大的情形,因为我日常运维的数据库对象少则几千,多则几万甚至几十万,所以传统exp ...

  8. koa中间执行机制

    start 基于 koa 2.11 按以下流程分析: const Koa = require('koa'); const app = new Koa(); const one = (ctx, next ...

  9. Pycharm2019.1.1永久破解

    声明:不做商业用途,电脑系统win10专业版,亲测有效. 1,下载新版破解补丁+安装包 网盘链接 提取码:hn0u 下载补丁文件 jetbrains-agent.jar 并将它放置到 pycharm安 ...

  10. python书籍推荐以及杂七杂八

    黄哥推荐学习Python 10本好书 Python3网络爬虫开发实战 github daily-reading 想对大家说的话 POJ 算法练习 http://openjudge.cn/ http:/ ...