zoukankan      html  css  js  c++  java
  • 信号量的使用 ManualResetEvent

    线程的等待时可以用这个,不论是线程池还是线程都可以用这个做等待。

    
    ManualResetEvent md=new ManualResetEvent(false);//这个false 设置线程等待, true 允许线程不待等
    IAsyncResult result= new Action<string>((t) =>
                {
                    Console.WriteLine(t);
                    mre.Set();//允许线程不用继续等待,可以执行下去
                }).BeginInvoke("你好",null,null);
                mre.WaitOne();//主线程被卡在这里,等待信号量变成true(mre.Set()这个方法后就可变为true不用等待)
                Console.WriteLine("你吃饭了么!");
                mre.Reset();//重新设为线程等待
    
                IAsyncResult result01= new Action<string>((t) =>
                {
                    Console.WriteLine(t);
                    mre.Set();//设置线程不用继续等待,可以执行下去
                }).BeginInvoke("还没吃",null,null);
                mre.WaitOne();//又被阻塞了
    			Console.WriteLine("一起吃饭吧!");
    //输出结果
    你好
    你吃饭了么!
    还没吃
    一起吃饭吧!
    
    //线程池中的使用
     mre.Reset();
                ThreadPool.QueueUserWorkItem((t) =>
                {
                    Console.WriteLine("我是从线程池中走出的线程!");
                    mre.Set();
                });
                mre.WaitOne();
    

    当然也可以用循环待等的执行的方式进行线程待等

     while (!result.IsCompleted)
                {
                    Thread.Sleep(500);
                    Console.WriteLine("我在等你回复!");
                    
                }
      Console.WriteLine("我吃了!");
    
  • 相关阅读:
    电商企业怎样用好大数据
    网络编程入门
    TCP和UDP的常见面试题
    跨域请求
    微服务的统一异常处理
    Session和Cookie
    Restful风格
    正向代理和反向代理的总结
    解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题
    MySQL数据的优化方案
  • 原文地址:https://www.cnblogs.com/wangSOA/p/9607419.html
Copyright © 2011-2022 走看看