[tips]: 多线程 ManualResetEvent

简介:

WaitHandle用于实现对共享资源的独占访问,AutoResetEvent和ManualResetEvent都继承自它。 WaitHandle.WaitOne方法将阻塞当前线程,直到WaitHandle收到信号。但有时候,我们需要非阻塞的方式测试WaitHandle 状态。

public virtual bool WaitOne(int millisecondsTimeout)

可以指定等待的时间间隔。如果当前实例收到信号,则为true;否则为false。特别地,如果 millisecondsTimeout为零,则该方法不会进入阻塞状态。该方法会测试等待句柄的状态并立即返回。

ManualResetEvent mre=new ManualResetEvent(false)  //默认无信号

mre.set()可以让当前实例获得信号

现在我们先让程序每个10秒输出Hello world,可以这么写:

 

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Threading;
   6:  
   7: namespace MultiThread
   8: {
   9:     public class Program
  10:     {
  11:         static ManualResetEvent mre = new ManualResetEvent(false);
  12:         static void Main()
  13:         {
  14:             Thread t = new Thread(new ThreadStart(Hello));
  15:             t.Start();
  16:             while (true)
  17:             {
  18:                 char a = Console.ReadKey().KeyChar;
  19:                 if (a.ToString().ToUpper() == "X")
  20:                 {
  21:                     mre.Set();
  22:                     t.Abort();
  23:                     t.Join();
  24:                     Console.WriteLine(t.Name + " stopped");
  25:                     break;
  26:                 }
  27:             }
  28:         }
  29:  
  30:         static void Hello()
  31:         {
  32:             while (true)
  33:             {
  34:                 if (mre.WaitOne(1 * 1000)) break;
  35:                 Console.WriteLine("Hello");
  36:             }
  37:         }
  38:     }
  39: }
本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2009/05/21/1486294.html如需转载请自行联系原作者

王德水


相关文章
C# | 使用AutoResetEvent和ManualResetEvent进行线程同步和通信
在多线程编程中,AutoResetEvent 和 ManualResetEvent 是两个常用的同步原语。它们用于线程间的通信和协调,以确保线程按照特定的顺序执行。本篇博客将介绍这两种同步原语的概念、用法和区别。
346 0
C# | 使用AutoResetEvent和ManualResetEvent进行线程同步和通信
C# 使用ManualResetEvent 进行线程同步
上一篇我们介绍了AutoResetEvent,这一篇我们来看下ManualResetEvent ,顾名思义ManualResetEvent  为手动重置事件。 AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别。
937 0
C#多线程之二:ManualResetEvent和AutoResetEvent
转自博客:http://www.cnblogs.com/charley_yang/archive/2010/10/31/1865663.html 初次体验 ManualResetEvent和AutoResetEvent主要负责多线程编程中的线程同步;以下一段是引述网上和MSDN的解析: 在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别。
1196 0
|
Windows
重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent
原文:重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent [源码下载] 重新想象 Windows 8 Store Apps (...
788 0
多线程中的ManualResetEvent
先来看一下简单的多线程控制台程序: using System;using System.Threading;namespace ManualResetEventStudy{    class ThreadClass    {        static void t1()        {    ...
612 0
|
2月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
172 6
|
5月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
316 83
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
295 0
|
3月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
275 16

热门文章

最新文章