• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C# 并行任务同步机制 - AutoResetEvent

武飞扬头像
fervour
帮助1

AutoResetEvent:

         命名空间:System.Threading

         定义:表示线程同步事件在一个等待线程释放后收到信号时自动重置。该类,是不允许继承的。允许线程之间通过发送信号进行通信。通常,此通信涉及线程需要独占资源

AutoResetEvent,可以让多个线程之间通过信号,切换访问,编写相对复杂的程序。

下面我们用一个场景来说明,线程之间通过信号发送,进行任务切换访问。

      超市中,我们通常买的袋装手抓饼,1张饼,1张隔离纸,防止面饼之间的粘连,每个袋中装10个面饼。
      线程1:用于放面饼
      线程2:用于放隔离纸

一、声明信号量变量

  1.  
    //声明两个信号,用于在线程之间发送信号
  2.  
    //构造函数使用false,用于表示处于等待状态,Set函数之后,启动线程
  3.  
    static AutoResetEvent ateA = new AutoResetEvent(false);
  4.  
    static AutoResetEvent ateB = new AutoResetEvent(false);

二、声明两个函数,用于操作面饼和隔离纸

  1.  
    /// <summary>
  2.  
    /// 面饼线程,用于放置面饼
  3.  
    /// </summary>
  4.  
    static void ThreadCake()
  5.  
    {
  6.  
    while (nSubOne > 0)
  7.  
    {
  8.  
    nSubOne--;
  9.  
    Console.WriteLine($"面饼线程:开始装填第{10-nSubOne}张面饼");
  10.  
    ateB.Set(); //给ateB一个开始信号
  11.  
    Thread.Sleep(5000);
  12.  
    }
  13.  
    }
  14.  
    /// <summary>
  15.  
    /// 隔离纸线程,用于放置隔离纸
  16.  
    /// </summary>
  17.  
    static void ThreadReleasePaper()
  18.  
    {
  19.  
     
  20.  
    while (nSubOne > 0)
  21.  
    {
  22.  
    ateB.WaitOne();
  23.  
    Console.WriteLine($"塑料线程:开始装填第{10 - nSubOne}张塑料");
  24.  
    ateA.Set();
  25.  
    Thread.Sleep(500);
  26.  
    }
  27.  
    }
学新通

三、声明线程,启动

  1.  
    Thread thdOne = new Thread(new ThreadStart(ThreadCake));
  2.  
    thdOne.Start();
  3.  
    Thread thdTwo = new Thread(new ThreadStart(ThreadReleasePaper));
  4.  
    thdTwo.Start();

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfkbjg
系列文章
更多 icon
同类精品
更多 icon
继续加载