.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();   
//第二次通知等待进程
             }



         }

     }

posted @ 2008-07-07 16:03  眼里进了砂  阅读(276)  评论(0编辑  收藏  举报