Example #1
0
 public static int Main(String[] args)
   {
   Console.WriteLine("MutexSample.cs ...");
   gM1 = new Mutex(true,"MyMutex");			
   gM2 = new Mutex(true);						
   Console.WriteLine(" - Main Owns gM1 and 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 releases gM1");
   gM1.ReleaseMutex( );		
   Thread.Sleep(1000);
   Console.WriteLine(" - Main releases gM2");
   gM2.ReleaseMutex( );		
   WaitHandle.WaitAll(evs);	
   Console.WriteLine("... MutexSample.cs");
   return 0;
   }
    public static int Main(String[] args)
    {
        Console.WriteLine("MutexSample.cs ...");
        gM1 = new Mutex(true, "MyMutex");
        gM2 = new Mutex(true);
        Console.WriteLine(" - Main Owns gM1 and 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 releases gM1");
        gM1.ReleaseMutex( );
        Thread.Sleep(1000);
        Console.WriteLine(" - Main releases gM2");
        gM2.ReleaseMutex( );
        WaitHandle.WaitAll(evs);
        Console.WriteLine("... MutexSample.cs");
        return(0);
    }
Example #3
0
    static void Main()
    {
        Console.WriteLine("Mutex Sample ...");

        // Create Mutex initialOwned, with name of "Mutex1".
        gM1 = new Mutex(true, "Mutex1");

        // Create Mutex initialOwned, with no name.
        gM2 = new Mutex(true);

        Console.WriteLine(" - Main Owns gM1 and gM2");

        AutoResetEvent[] events = new AutoResetEvent[4];

        events[0] = Event1;  // event for thread 1
        events[1] = Event2;  // event for thread 2
        events[2] = Event3;  // event for thread 3
        events[3] = Event4;  // event for thread 4

        MutexSample ms = new MutexSample( );

        Thread t1 = new Thread(new ThreadStart(ms.t1Start));
        Thread t2 = new Thread(new ThreadStart(ms.t2Start));
        Thread t3 = new Thread(new ThreadStart(ms.t3Start));
        Thread t4 = new Thread(new ThreadStart(ms.t4Start));

        t1.Start();  // calls Mutex.WaitAll(Mutex[] of gM1 and gM2)
        t2.Start();  // calls Mutex.WaitOne(Mutex gM1)
        t3.Start();  // calls Mutex.WaitAny(Mutex[] of gM1 and gM2)
        t4.Start();  // calls Mutex.WaitOne(Mutex gM2)

        Thread.Sleep(2000);

        Console.WriteLine(" - Main releases gM1");
        gM1.ReleaseMutex( );  // t2 and t3 will end and signal

        Thread.Sleep(1000);

        Console.WriteLine(" - Main releases gM2");
        gM2.ReleaseMutex( );  // t1 and t4 will end and signal

        // Waiting until all four threads signal that they are done.
        WaitHandle.WaitAll(events);

        Console.WriteLine("... Mutex Sample");
    }
Example #4
0
    public static int Main()
    {
        Console.WriteLine("Mutex Sample ...");
        // Create Mutex initialOwned, with name of "MyMutex".
        gM1 = new Mutex(true, "MyMutex");
        // Create Mutex initialOwned, with no name.
        gM2 = new Mutex(true);
        Console.WriteLine(" - Main Owns gM1 and gM2");

        AutoResetEvent[] evs = new AutoResetEvent[4];
        evs[0] = Event1;    // Event for t1
        evs[1] = Event2;    // Event for t2
        evs[2] = Event3;    // Event for t3
        evs[3] = Event4;    // Event for t4

        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();   // Does Mutex.WaitAll(Mutex[] of gM1 and gM2)
        t2.Start();   // Does Mutex.WaitOne(Mutex gM1)
        t3.Start();   // Does Mutex.WaitAny(Mutex[] of gM1 and gM2)
        t4.Start();   // Does Mutex.WaitOne(Mutex gM2)

        Thread.Sleep(2000);
        Console.WriteLine(" - Main releases gM1");
        gM1.ReleaseMutex();  // t2 and t3 will end and signal

        Thread.Sleep(1000);
        Console.WriteLine(" - Main releases gM2");
        gM2.ReleaseMutex();  // t1 and t4 will end and signal

        // Waiting until all four threads signal that they are done.
        WaitHandle.WaitAll(evs);
        Console.WriteLine("... Mutex Sample");

        return 0;
    }
    public static void Main(String[] args)

    {
          Console.WriteLine("Mutex Sample ...");

          //创建一个Mutex对象,并且命名为MyMutex

              gM1 = new Mutex(true, "MyMutex");

          //创建一个未命名的Mutex 对象.

              gM2 = new Mutex(true);

          Console.WriteLine(" - Main Owns gM1 and gM2");

          AutoResetEvent[] evs = new AutoResetEvent[5];

          evs[0] = Event1; //为后面的线程t1,t2,t3,t4定义AutoResetEvent对象

          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( ); // 使用Mutex.WaitAll()方法等待一个Mutex数组中的对象全部被释放

          t2.Start( ); // 使用Mutex.WaitOne()方法等待gM1的释放

          t3.Start( ); // 使用Mutex.WaitAny()方法等待一个Mutex数组中任意一个对象被释放

          t4.Start( ); // 使用Mutex.WaitOne()方法等待gM2的释放

          Thread.Sleep(2000);

          Console.WriteLine(" - Main releases gM1");

          gM1.ReleaseMutex( ); //线程t2,t3结束条件满足

          Thread.Sleep(1000);

          Console.WriteLine(" - Main releases gM2");

          gM2.ReleaseMutex( ); //线程t1,t4结束条件满足

                               //等待所有四个线程结束

          WaitHandle.WaitAll(evs);

          Console.WriteLine("... Mutex Sample");

          Console.ReadLine();
    }