WaitHandle——使用AutoResetEvent

区别ManualResetEvent:

使用AutoResetEvent和使用ManualResetEvent是完全相同的,只有一点区别:在使用autoresetevent时,在调用waitOne后,会自动执行到一个reset方法。

AutoResetEvent的waitone相当于将ManualResetEvent.waitone和reset合并为一个方法执行。

需要注意:autoresetevent的waitone和reset合并为了一个原子操作;

代码示例:

namespace 使用AutoResetEvent
{
    class Program
    {

        AutoResetEvent mre = new AutoResetEvent(false);

        static void Main(string[] args)
        {
            Thread.CurrentThread.Name = "main ";
            Program p = new Program();
            Thread worker = new Thread(p.ThreadEntry);
            worker.Name = "worker";
            worker.Start();

            Console.WriteLine("main :start worker");
            p.mre.Set();
            Thread.Sleep(100);

            Console.WriteLine("main:worker go...");
            p.mre.Set();
            Thread.Sleep(100);

        }

        void ThreadEntry() {

            int i = 0;
            string name = Thread.CurrentThread.Name;
            while (i<10)
            {
                mre.WaitOne();   //这里实际上是waitone和reset************
                Console.WriteLine("{0}:{1}---{2}",name ,i,DateTime .Now .Millisecond);
                i++;

            }

        }
    }
}
时间: 2024-10-20 11:00:39

WaitHandle——使用AutoResetEvent的相关文章

多线程中的锁系统(三)-WaitHandle、AutoResetEvent、ManualResetEvent

介绍 本章主要说下基于内核模式构造的线程同步方式,事件,信号量. 目录 一:理论 二:WaitHandle 三:AutoResetEvent 四:ManualResetEvent 五:总结 一:理论 我们晓得线程同步可分为,用户模式构造和内核模式构造. 内核模式构造:是由windows系统本身使用,内核对象进行调度协助的.内核对象是系统地址空间中的一个内存块,由系统创建维护. 内核对象为内核所拥有,而不为进程所拥有,所以不同进程可以访问同一个内核对象, 如进程,线程,作业,事件,文件,信号量,互

多线程之线程同步

多线程内容大致分两部分,其一是异步操作,可通过专用,线程池,Task,Parallel,PLINQ等,而这里又涉及工作线程与IO线程:其二是线程同步问题,鄙人现在学习与探究的是线程同步问题. 通过学习<CLR via C#>里面的内容,对线程同步形成了脉络较清晰的体系结构,在多线程中实现线程同步的是线程同步构造,这个构造分两大类,一个是基元构造,一个是混合构造.所谓基元则是在代码中使用最简单的构造.基元构造又分成两类,一个是用户模式,另一个是内核模式.而混合构造则是在内部会使用基元构造的用户模

C# 同步

Interlockedsimple arithmetic operations are not atomic.Interlocked类提供了一个专门的机制用于完成这些特定的操作.这个类提供了Increment.Decrement.Add静态方法用于对int或long型变量的递增.递减或相加操作 Interlocked.Increment(ref counter); AutoResetEventOne simple, and thread-safe way to force a thread to

Chapter 15 - Multithread programming

The content and code of this article is referenced from book Pro C#5.0 and the .NET 4.5 Framework by Apress. The intention of the writing is to review the konwledge and gain better understanding of the .net framework.  1. Process/AppDomain/Context/Th

项目里线程池的用法

public void GenerateData(string dbFullName) { bool bSuccess = true; if (File.Exists(dbFullName)) { File.Delete(dbFullName); } System.Data.SQLite.SQLiteConnection.CreateFile(dbFullName); if (File.Exists(dbFullName)) { SQLiteHelper.connectionString = S

采集58信息的一些总结

一个朋友问我能不能把他做个小程序.抓取58上面包含"维修"的数据,比如公司名称,电话号码等等 打开58,收索"维修" 单击 房屋维修,进入一个列表页面, 随便单击一个,进入详细页面 需要请求58服务器3次.然后匹配html元素获取自己需要的信息,数据匹配自然少不了正则表达式,用过的都知道, 对于我来说,写正则表达式是非常头疼的事情,所以可以选择第三方库:比如HtmlAgilityPack,Jumony等等,我这里选择的是Jumony 博客园有对Jumony入门的文章

C# HttpBrowser 跨进程访问,解决内存泄露问题

1 #undef DEBUG 2 using Microsoft.Win32; 3 using Newtonsoft.Json; 4 using System; 5 using System.Collections.Generic; 6 using System.Collections.Specialized; 7 using System.Diagnostics; 8 using System.Diagnostics.Contracts; 9 using System.Drawing; 10

WCF揭秘学习笔记(5):WF定制活动

WF(Windows Workflow Foundation,Windows工作流基础)为.NET提供了一种基于模型的.声明方式的过程执行引擎,它改变了传统的通过一行行编写代码来开发服务功能的方式. WF包含三个核心组件:活动框架(activity framework).运行时环境(runtime environment).工作流设计器(workflow designer). WF不是什么 工作流这个词在软件开发领域和相关社区里已经被"滥用"了.所以弄清楚WF在这些流行的工作流概念中到

C# 多线程通信详解

一.WaitHandler的类层次 可以看到 WaitHandle是 事件(EventWaitHandle).互斥体(Mutex).信号量(Sempahore)的父类. WaitHandle我们最经常使用的方法,并是使用它的静态方法WaitAll. 我们会发现在这个WaitHandle里面只有等待方法,也就是它会阻塞当前线程的执行. 那么如何要解除它对当前线程的阻塞呢,那么就需要依赖于各个子类的方法了. 例如现在有一个这样的场景,如何在一个方法中,等待所有的线程全部执行完,最后再统计得到的计算结