c# - 线程 Thread AutoResetEvent 与 ManualResetEvent

using System;
using System.IO;
using System.Text;
using System.Threading;

namespace ThreadingDemo
{
    /// <summary>
    /// AutoResetEvent及ManualResetEvent: 主要目的是使线程同步执行:
    /// 1. 线程1:在当前线程方法中调用_waitHandle1.WaitOne(), 使线程1阻塞。(_waitHandle1: 一个AutoResetEvent对象或一个ManualResetEvent对象)
    /// 2. 在其它线程(例如主线程)中调用_waitHandle1.Set(), 恢复线程1的执行, 方法从_waitHandle1.WaitOne()处向后执行。
    /// 3. AutoResetEvent与ManualResetEvent的主要区别是: 
    ///     a. AutoResetEvent.Set()每次只能恢复一个WaitOne()
    ///     b. ManualResetEvent.Set()一次恢复所有的WaitOne(), 请参见ManualResetEvent示例.
    /// </summary>
    class Program
    {
        static EventWaitHandle _waitHandle1 = new AutoResetEvent(false);
        static EventWaitHandle _waitHandle2 = new AutoResetEvent(false);

        static EventWaitHandle _waitHandleManual = new ManualResetEvent(false);
        static EventWaitHandle _waitHandleAuto = new AutoResetEvent(false);

        static void Main(string[] args)
        {
            // 1. AutoResetEvent示例1
            new Thread(WaiterAuto).Start();
            while (true)
            {
                Console.WriteLine("Press <Enter> to release threads.");
                Console.ReadLine();
                _waitHandleAuto.Set();
            }

            // 2. ManualResetEvent示例
            /*
            new Thread(WaiterMa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值