博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程之间灵活传递信号(ManualResetEventSlim )
阅读量:5149 次
发布时间:2019-06-13

本文共 2000 字,大约阅读时间需要 6 分钟。

当主程序启动时,首先创建ManualResetEventSlim 类的一个实例。然后启动三个线程,等待事件信号通知它们继续执行。

 

1 ///  2         /// 创建 ManualResetEventSlim 实例 3         ///  4         private static ManualResetEventSlim _mainEvent = new ManualResetEventSlim(false); 5  6         ///  7         /// 接收信号继续执行 8         ///  9         /// 线程名10         /// 时间(秒)11         public void TravelThroughGates(string threadName, int secods)12         {13             // threadName  falls to sleep14             System.Threading.Thread.Sleep(TimeSpan.FromSeconds(secods));15 16             // threadName waits for the gates to open17             _mainEvent.Wait();      // 阻止当前线程,直到接收到信号18 19             // threadName enters the gates20             Console.WriteLine($"{threadName} 继续执行");21             22         }

 

线程只有在ManualResetEventSlim 对象发出信号才能继续执行,不然只有继续等待,直到接接收到信号。

 

1 ///  2         /// 输出 3         ///  4         public void Print() 5         { 6             var t1 = new System.Threading.Thread(() => TravelThroughGates("Thread 1", 5)); 7             var t2 = new System.Threading.Thread(() => TravelThroughGates("Thread 2", 6)); 8             var t3 = new System.Threading.Thread(() => TravelThroughGates("Thread 3", 12)); 9 10             t1.Start();11             t2.Start();12             t3.Start();13             System.Threading.Thread.Sleep(TimeSpan.FromSeconds(6));14 15             // The gates are now open16             _mainEvent.Set();   // 发射信号17            18             System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2));19             _mainEvent.Reset();     // 关闭信号20 21             // The gates have been closed22             System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10));23 24             // The gates are now open for the second time25             _mainEvent.Set();   // 发射信号26 27             System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2));28 29             //The gates have been closed30             _mainEvent.Reset();     // 关闭信号31         }

 

转载于:https://www.cnblogs.com/KevinTong/p/11462595.html

你可能感兴趣的文章
关于PHP会话:session和cookie
查看>>
jQuery on(),live(),trigger()
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
导航,头部,CSS基础
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
gzip
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
注解小结
查看>>
list control控件的一些操作
查看>>
一月流水账
查看>>
判断字符串在字符串中
查看>>
HashPump用法
查看>>
Vue安装准备工作
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>