⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c9-07.cs

📁 一本很好的教材.C#开发者必备.内容全面,很难得哦.
💻 CS
字号:
// 运用Mutex类同步线程示例
using System;
using System.Threading;
public class MutexSample{
   static Mutex gM1;
   static Mutex gM2;
   const int ITERS = 100;
   static AutoResetEvent Event1 = new AutoResetEvent(false);
   static AutoResetEvent Event2 = new AutoResetEvent(false);
   static AutoResetEvent Event3 = new AutoResetEvent(false);
   static AutoResetEvent Event4 = new AutoResetEvent(false);
   public static void Main(String[] args){
      // 创建两个Mutex对象,一个名叫MyMutex,一个没有名字
      gM1 = new Mutex(true,"MyMutex");
      gM2 = new Mutex(true);                      
      Console.WriteLine("Main方法拥有gM1和gM2");
      AutoResetEvent[] evs = new AutoResetEvent[4];
      evs[0] = Event1;
      evs[1] = Event2;
      evs[2] = Event3;
      evs[3] = Event4;
      MutexSample tm  = new MutexSample( );
      Thread t1 = new Thread(new ThreadStart(tm.t1Start));
      Thread t2 = new Thread(new ThreadStart(tm.t2Start));
      Thread t3 = new Thread(new ThreadStart(tm.t3Start));
      Thread t4 = new Thread(new ThreadStart(tm.t4Start));
      t1.Start();
      t2.Start();
      t3.Start();
      t4.Start();
      Thread.Sleep(2000);
      Console.WriteLine("Main方法释放了gM1");
      // t2和t3线程结束
      gM1.ReleaseMutex( );
      Thread.Sleep(1000);
      Console.WriteLine("Main方法释放了gM2");
      // t1和t4线程结束
      gM2.ReleaseMutex( );
      // 等待4个线程都结束
      WaitHandle.WaitAll(evs);
   }
   public void t1Start(){
      Console.WriteLine("t1Start启动了");
      Mutex[] gMs = new Mutex[2];
      gMs[0] = gM1;
      gMs[1] = gM2;
      // 等待两个Mutex对象都被释放
      Mutex.WaitAll(gMs);
      Thread.Sleep(2000);
      Console.WriteLine("t1Start结束了");
      // 标记方法已经结束
      Event1.Set( );
   }
   public void t2Start(){
      Console.WriteLine("t2Start启动了");
      // 等待gM1对象被释放
      gM1.WaitOne( );
      Console.WriteLine("t2Start结束了");
      // 标记方法已经结束
      Event2.Set( );
   }
   public void t3Start(){
      Console.WriteLine("t3Start启动了");
      Mutex[] gMs = new Mutex[2];
      gMs[0] = gM1;
      gMs[1] = gM2;
      // 等待两个Mutex中任何一个被释放
      Mutex.WaitAny(gMs);
      Console.WriteLine("t3Start结束了");
      // 标记方法已经结束
      Event3.Set( );
   }
   public void t4Start(){
      Console.WriteLine("t4Start启动了");
      // 等待gM2被释放
      gM2.WaitOne( );
      Console.WriteLine("t4Start结束了");
      // 标记方法已经结束
      Event4.Set( );
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -