.Net的线程同步方法一:ManualResetEvent

class  Program
     
{
         
/**//// <summary>
         
/// ManualResetEvent建立时是把false作为start的初始状态,这个类用于通知另一个线程,让它等待一个或多个线程。
         
/// 如这个例子中,等待线程thread1线程调用mre.WaitOne(), 用于发信号的线程调用mre.Set().
         
/// </summary>

         public static ManualResetEvent mre = new ManualResetEvent(false);

         
public static void trmain()
         
{

             Thread tr 
= Thread.CurrentThread;

             Console.WriteLine(tr.Name 
+ " 开始第一波等待");
            mre.WaitOne();   
//等到什么时候呢?等到mre.Set()被调用
             Console.WriteLine(tr.Name + " 第一波启动t");

            mre.Reset();   
//再次重置
             Console.WriteLine(tr.Name + " 开始第二波等待");
            mre.WaitOne();   
//再次等待
             Console.WriteLine(tr.Name + " 第二波启动");

             
for (int x = 0; x < 10; x++)
             
{

                 Thread.Sleep(
1000);
                 Console.WriteLine(tr.Name 
+ "" + x);
             }

         }
  


         
static void Main(string[] args)
         
{
             Thread thrd1 
= new Thread(new ThreadStart(trmain));
             thrd1.Name 
= "thread1";
             thrd1.Start();

             Thread thrd2 
= new Thread(new ThreadStart(trmain));
             thrd2.Name 
= "thread2";
             thrd2.Start();

             
for (int x = 0; x < 10; x++)
             
{
                 Thread.Sleep(
900);
                 Console.WriteLine(
"Main :" + x);
                 
if (5 == x)
                 
{
                    mre.Set();   
//子线程的mre.WaitOne()可以执行了。第一次等待进程
                     
//;   //如果什么都不做呢,mre.Wait()那个线程就一直等在那里了?
                 }

             }


             
while (thrd1.IsAlive)
             
{

                 Thread.Sleep(
1000);

                 Console.WriteLine(
"Main: waiting for thread to stop");
                mre.Set();   
//第二次通知等待进程
             }



         }

     }

转载于:https://www.cnblogs.com/fifastar/archive/2008/07/07/1237582.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值