如何使用AutoResetEvent控制线程

发布时间:2021-06-23 14:16:11 作者:Leah
来源:亿速云 阅读:170

本篇文章为大家展示了如何使用AutoResetEvent控制线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

AutoResetEvent概念

AutoResetEvent主要方法有

  1. AutoResetEvent(bool initialState):构造函数,用一个指示是否将初始状态设置为终止的布尔值初始化该类的新实例。 false:无信号,子线程的WaitOne方法不会被自动调用 true:有信号,子线程的WaitOne方法会被自动调用

  2. Reset ():将事件状态设置为非终止状态,导致线程阻止;如果该操作成功,则返回true;否则,返回false。

  3. Set ():将事件状态设置为终止状态,允许一个或多个等待线程继续;如果该操作成功,则返回true;否则,返回false。

  4. WaitOne(): 阻止当前线程,直到收到信号。

  5. WaitOne(TimeSpan, Boolean) :阻止当前线程,直到当前实例收到信号,使用 TimeSpan 度量时间间隔并指定是否在等待之前退出同步域。

有了上面的解释,开始展示代码

//若要将初始状态设置为终止,则为 true;若要将初始状态设置为非终止,则为 false        static AutoResetEvent oddResetEvent = new AutoResetEvent(false);        static AutoResetEvent evenResetEvent = new AutoResetEvent(false);        static int i = 0;        static void Main(string[] args)        {            //ThreadStart是个委托            Thread thread1 = new Thread(new ThreadStart(show));            thread1.Name = "偶数线程";            Thread thread2 = new Thread(new ThreadStart(show));            thread2.Name = "奇数线程";            thread1.Start();            Thread.Sleep(200);            thread2.Start();            Console.Read();
       }        public static void show()        {            if (i == 1) evenResetEvent.WaitOne();            while (i <= 100)            {                int num = i % 2;                if (num == 0)                {                    Console.WriteLine("{0}:{1}  {2}    ", Thread.CurrentThread.Name, i++, num);                    evenResetEvent.Set();                    oddResetEvent.WaitOne();                }               else                {                      Console.WriteLine("{0}:{1}  {2}    ", Thread.CurrentThread.Name, i++, num);                    //如果此时AutoResetEvent 为非终止状态,则线程会被阻止,并等待当前控制资源的线程通过调用 Set 来通知资源可用。否则不会被阻止                    oddResetEvent.Set();                    evenResetEvent.WaitOne();                }            }        }

结果如下图所示:
如何使用AutoResetEvent控制线程


上述内容就是如何使用AutoResetEvent控制线程,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. unix 多线程控制应用
  2. 线程的控制与分离

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

autoresetevent

上一篇:Spring Ioc中各个scope的Bean是怎么创建的

下一篇:C#中Dictionary如何使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》