zoukankan      html  css  js  c++  java
  • 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()方法的线程:此处改为了终止状态,程序可以继续运行了。

  • 相关阅读:
    Eclipse consle 输出语句中,误输中文,假死问题
    Eclipse 快捷键 (最实用)
    mysql 4种启动方式
    mysql索引的类型和优缺点
    Windows上 使用Composer安装tp5
    php 更新配置文件
    可视化工具连接Linux上的redis
    HttpClient 4 教程 第3章 HTTP状态管理
    HttpClient 4 教程 第2章 连接管理
    HttpClient 4 教程 第1章 基础
  • 原文地址:https://www.cnblogs.com/lisweden/p/12304754.html
Copyright © 2011-2022 走看看