EventWaitHandle 类用于在异步操作时控制线程间的同步,即控制一个或多个线程继行或者等待其他线程完成。

  构造函数

EventWaitHandle(bool initialState, EventResetMode mode);

  initialState设置初始状态,如果为true,则WaitOne()在调用Reset()方法前不会阻塞线程,先调用Reset()再调用WaitOne()会阻塞WaitOne()所在线程;如果设置为false,则WaitOne()会阻塞,直到调用Set()

  mode设置为EventResetMode.ManualReset,在调用Set()时所有WaitOne()阻塞线程都会继续执行;设置为EventResetMode.AutoReset则每次调用Set()会使一个WaitOne()阻塞的线程继续执行,一般按照阻塞先后顺序执行

  上一个例子

using System;
using System.Threading; namespace ConsoleApp1
{
class Program
{
private int n1, n2, n3;
//将信号状态设置为非终止
EventWaitHandle myEventWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
static void Main(string[] args)
{
Program p = new Program();
Thread t0 = new Thread(new ThreadStart(p.WriteThread));
Thread t1 = new Thread(new ThreadStart(p.ReadThread1));
Thread t2 = new Thread(new ThreadStart(p.ReadThread2));
t0.Start();
t1.Start();
t2.Start();
Console.ReadLine();
} private void WriteThread()
{
//允许其他需要等待的线程阻塞
myEventWaitHandle.Reset();
Console.WriteLine("t1");
n1 = 1;
n2 = 2;
n3 = 3;
//允许其他等待线程继续
myEventWaitHandle.Set();
} private void ReadThread1()
{
//堵塞当前线程,知道收到信号
myEventWaitHandle.WaitOne();
Console.WriteLine("{0}+{1}+{2}={3}", n1, n2, n3, n1 + n2 + n3);
} private void ReadThread2()
{
//堵塞当前线程,知道收到信号
myEventWaitHandle.WaitOne();
Console.WriteLine("{0}+{1}+{2}={3}", n3, n2, n1, 2*(n1 + n2 + n3));
}
}
}

  执行结果

C# EventWaitHandle类解析的更多相关文章

  1. Bootstrap 类解析

    Bootstrap 类解析 元素 Bootstrap 类 定义 <div> container 内容容器 <table> table 表格 <table> tabl ...

  2. 【Owin 学习系列】2. Owin Startup 类解析

    Owin Startup 类解析 每个 Owin 程序都有 startup 类,在这个 startup 类里面你可以指定应用程序管道模型中的组件.你可以通过不同的方式来连接你的 startup 类和运 ...

  3. Thrift compiler代码生成类解析

    代码生成类解析: Thrift--facebook RPC框架,介绍就不说了,百度,google一大把,使用也不介绍,直接上结构和分析吧. Hello.thrift文件内容如下: namespace ...

  4. SpringBoot入门(三)——入口类解析

    本文来自网易云社区 上一篇介绍了起步依赖,这篇我们先来看下SpringBoot项目是如何启动的. 入口类 再次观察工程的Maven配置文件,可以看到工程的默认打包方式是jar格式的. <pack ...

  5. Spark 资源调度包 stage 类解析

    spark 资源调度包 Stage(阶段) 类解析 Stage 概念 Spark 任务会根据 RDD 之间的依赖关系, 形成一个DAG有向无环图, DAG会被提交给DAGScheduler, DAGS ...

  6. 【Spring注解驱动开发】AOP核心类解析,这是最全的一篇了!!

    写在前面 昨天二狗子让我给他讲@EnableAspectJAutoProxy注解,讲到AnnotationAwareAspectJAutoProxyCreator类的源码时,二狗子消化不了了.这不,今 ...

  7. 【Python】-【类解析】--【脚本实例】

    通过脚本事例,解析下Python中类的几个概念在脚本中的应用 脚本如下: ++++++++++++++++++++++++++++++++++++++++ #!/usr/bin/env python# ...

  8. .net HTMLParser详细使用说明 强大的Filter类 解析HTML文档如此简单

    背景: HTMLParser原本是一个在sourceforge上的一个Java开源项目,使用这个Java类库可以用来线性地或嵌套地解析HTML文本.他的 功能强大和开源等特性吸引了大量Web信息提取的 ...

  9. Spring源码情操陶冶-AOP之Advice通知类解析与使用

    阅读本文请先稍微浏览下上篇文章Spring源码情操陶冶-AOP之ConfigBeanDefinitionParser解析器,本文则对aop模式的通知类作简单的分析 入口 根据前文讲解,我们知道通知类的 ...

随机推荐

  1. 【Linux】java.io.IOException: error=24, Too many open files解决

    linux系统中执行java程序的时候,如果打开文件超过了限制,就会报错: java.io.IOException: error=24, Too many open files 解决办法: 首先查看j ...

  2. apiAutoTest: 接口自动化测试的数据清洗(备份/恢复)处理方案

    接口自动化测试之数据清洗/隔离/备份/恢复 在得到QQ:1301559180 得代码贡献之后,想到了通过ssh连接上服务器,然后进行数据库备份,数据库恢复, 主要使用了 paramiko库 最终效果 ...

  3. 【葵花宝典】一天掌握Kubernetes

    1.kubernetes介绍 kubernetes,简称K8s,是用8代替8个字符"ubernete"而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kuber ...

  4. 查看pod日志无法查看的解决方式

    查看pod日志 [root@k8s-master1 ~]# kubectl logs nginx-7cdbd8cdc9-2qrcw Error from server (Forbidden): For ...

  5. 下面给出一个child-parent的表格,要求挖掘其中的父子辈关系,给出祖孙辈关系的表格。

    package org.apache.hadoop.examples; import java.util.HashMap; import java.io.IOException; import jav ...

  6. Routine Subroutine Coroutine 子程序 协程 子例程

    https://en.wikipedia.org/wiki/Subroutine In computer programming, a subroutine is a sequence of prog ...

  7. CF976B

    这是一道考验思维找规律的题,很有可做性. 正文 题意 一个 n * m 的矩阵,从左上角(1 , 1) 开始,先向下走直到最下方,再向右走到最右,再向上走一个,再走到最左......一直走到(1 , ...

  8. 在 WebAssembly 中实现回调的方式

    本文将介绍在 C++ 中实现 js 回调的几种方式. 在使用 wasm 的过程中, 避免不了要从 C++ 回调 js 的函数来实现异步交互. 官网文档 https://emscripten.org/d ...

  9. 常用DOS命令及其用法

    md ​ 1.作用:建立子目录 ​ 2.用法:md [盘符:] [路径名] ①盘符:指定要建立子目录的磁盘驱动器字母,若省略,则为当前驱动器: ②路径名:要建立的子目录的上级目录名,若缺省则建在当前目 ...

  10. CSS中一些重要概念

    在CSS的最后一个博客中,将学习整理一些CSS中的重要概念,对这些重要概念的掌握,将对CSS的认识十分重要. 了解这些概念对深入理解CSS的本质十分重要:(1)包含块containing block ...