ManualResetEvent & AutoResetEvent

ManualResetEvent和AutoResetEvent的作用可以理解为在线程执行中插入停顿点flag终止程序运行,然后通过设置flag的状态来使得程序继续运行。

两者的区别是:ManualResetEvent设置flag状态为可以运行后,所有在终止点的程序都可以继续运行;AutoResetEvent设置flag状态后,只会有一个程序继续运行(如果AutoResetEvent设置的flag有100个程序在等待,那flag开始状态必须要设置100次才能使得所有的线程都执行完毕)

示例如下(ManualResetEvent时会同时执行三个线程,AutoResetEvent则会依次执行):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Data;

public class Example
{

    /// <summary>

    /// 预备信号,准备发送,初始化

    /// </summary>

    public EventWaitHandle flag;
    public void Begin()
    {
        //flag = new ManualResetEvent(false);
        flag = new AutoResetEvent(false);
        Thread th1 = new Thread(() =>
        {
            flag.WaitOne();
             Thread.Sleep(1000);
           Console.WriteLine("第一个线程已经通过……");
            flag.Set();

        });

        Thread th2 = new Thread(() =>
        {
            flag.WaitOne();
             Thread.Sleep(1000);
           Console.WriteLine("第二个线程已经通过……");
            flag.Set();

        });

        Thread th3 = new Thread(() =>
        {
            flag.WaitOne();
            Thread.Sleep(1000);
            Console.WriteLine("第三个线程已经通过……");
           flag.Set();

        });

        th1.IsBackground = true;
         th1.Start();
         th2.IsBackground = true;
         th2.Start();
        th3.IsBackground = true;
         th3.Start();
         flag.Set();
        Thread.Sleep(1000);

        Console.WriteLine("A");
        Console.WriteLine("B");

    }

    static void Main(string[] args)
    {
        new Example().Begin();
        Console.ReadKey();
    }
}
时间: 2024-10-17 20:47:19

ManualResetEvent & AutoResetEvent的相关文章

C#多线程之ManualResetEvent,AutoResetEvent

基本概念: 创建对象的构造函数参数说明 ManualResetEvent(bool arg),true表示有信号状态,false表示无信号状态 set将该对象设置为有信号,如果一个线程调用该对象的waitOne方法,会继续往下执行,不会被阻塞. reset将该对象设置为无信号,如果一个线程调用该对象的waitOne方法,会被阻塞. AutoResetEvent和ManualResetEvent的不同之处在于,waitOne通过之后,自动设置为无信号状态. 原文地址:https://www.cnb

AutoResetEvent和ManualResetEvent理解

AutoResetEvent和ManualResetEvent用于多线程之间代码执行顺序的控制,它们继承自WaitHandleAPI类似,使用中还是有区别的. 之前每次需要使用的时候,都去找他们之间的区别.虽然当时是明白了,但没有深入理解透彻,过几天又忘记了.等到下次需要使用的时候又要重新去理解这2个类. 今天再次遇到他们,写下这篇随笔..加深理解印象.到了下次再用到不用再去纠结区别了. 1.构造函数参数 var manualResetEventWaitHandle = new ManualRe

AutoResetEvent和ManualResetEvent理解 z

AutoResetEvent和ManualResetEvent用于多线程之间代码执行顺序的控制,它们继承自WaitHandle,API相同,但在使用中还是有区别的. 每次使用时虽然理解了,但由于没有去深入思考记忆,过几天又忘记了.到下次需要使用的时候又要重新去理解这2个类. 今天再次遇到他们,写下这篇随笔..加深理解印象.以后不用去纠结他们了. 1.构造函数参数 var manualResetEventWaitHandle = new ManualResetEvent(true); var au

了解多线程

1概念 在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”. 2简要介绍 在计算机编程中,一个基本的概念就是同时对多个任务加以控制.许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程.可以通过多种途径达到这个目的.最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的.尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题.中断对那些实时性很强

.NET线程池

摘要 深度探索 Microsoft .NET提供的线程池, 揭示什么情况下你需要用线程池以及 .NET框架下的线程池是如何实现的,并告诉你如何去使用线程池. 内容 介绍 .NET中的线程池 线程池中执行的函数 使用定时器 同步对象的执行 异步I/O操作 监视线程池 死锁 有关安全性 结束 介绍 如 果你有在任何编程语言下的多线程编程经验的话,你肯定已经非常熟悉一些典型的范例.通常,多线程编程与基于用户界面的应用联系在一起,它们需要在不影响终 端用户的情况下,执行一些耗时的操作.取出任何一本参考书

.NET多线程编程

在.NET多线程编程这个系列我们讲一起来探讨多线程编程的各个方面.首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述.NET平台上多线程编程的知识,诸如System.Threading命名空间的重要类以及方法,并就一些例子程序来作说明. 引言 早期的计算硬件十分复杂,但是操作系统执行的功能确十分的简单.那个时候的操作系统在任一时间点只能执行一个任务,也就是同一时间只能执行一个程序.多个任务的执行必须得轮流执行,在系统里面进行排队等候.由于计

.Net线程问题解答

基础篇 怎样创建一个线程 受托管的线程与 Windows线程 前台线程与后台线程 名为BeginXXX和EndXXX的方法是做什么用的 异步和多线程有什么关联 WinForm多线程编程篇 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? Invoke,BeginInvoke干什么用的,内部是怎么实现的 每个线程都有消息队列吗? 为什么Winform不允许跨线程修改UI线程控件的值 有没有什么办法可以简化WinForm多线程的开发 线程池 线程池

.NET Framework的CLR提供了三种方法来完成对共享资源

.NET Framework的CLR提供了三种方法来完成对共享资源 ,诸如全局变量域,特定的代码段,静态的和实例化的方法和域. (1) 代码域同步:使用MonITor类可以同步静态/实例化的方法的全部代码或者部分代码段.不支持静态域的同步.在实例化的方法中,this指针用于同步:而在静态的方法中,类用于同步,这在后面会讲到. (2) 手工同步:使用不同的同步类(诸如WaitHandle, Mutex, ReaderWrITerLock, ManualResetEvent, AutoResetEv

Miscellaneous--Tech

1. Questions: 1)EF.2)MVC/MVP/MVVM.3)page lifecyle. preInit,Init,InitCompleted,preLoad,Load,LoadCompleted,preRender,Render,RenderCompleted,Unload.4)db table index, non-index.5)union, union all.6)cache, session.7)abstract, interface.8)GC.9)http/https S