好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#多线程中如何运用互斥锁Mutex

互斥锁(Mutex)

互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。

互斥锁可适用于一个共享资源每次只能被一个线程访问的情况

 函数:

//创建一个处于未获取状态的互斥锁

Public Mutex();

//如果owned为true,互斥锁的初始状态就是被主线程所获取,否则处于未获取状态

Public Mutex( bool owned);

 如果要获取一个互斥锁。应调用互斥锁上的WaitOne()方法,该方法继承于Thread.WaitHandle类

它处于等到状态直至所调用互斥锁可以被获取,因此该方法将组织住主调线程直到指定的互斥锁可用,如果不需要拥有互斥锁,用ReleaseMutex方法释放,从而使互斥锁可以被另外一个线程所获取。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

   

using System.Threading;

   

namespace MyTTCon

{

  class shareRes

  {

   public static int count = 0;

   public static Mutex mutex = new Mutex();

  }

   

  class IncThread

  {

   int number;

   public Thread thrd;

   public IncThread( string name, int n)

   {

    thrd = new Thread( this .run);

    number = n;

    thrd.Name = name;

    thrd.Start();

   }

   void run()

   {

    Console.WriteLine(thrd.Name + "正在等待 the mutex" );

    //申请

    shareRes.mutex.WaitOne();

    Console.WriteLine(thrd.Name + "申请到 the mutex" );

    do

    {

     Thread.Sleep(1000);

     shareRes.count++;

     Console.WriteLine( "In " + thrd.Name + "ShareRes.count is " + shareRes.count);

     number--;

    } while (number > 0);

    Console.WriteLine(thrd.Name + "释放 the nmutex" );

    // 释放

    shareRes.mutex.ReleaseMutex();

   }

  }

  class DecThread

  {

   int number;

   public Thread thrd;

   public DecThread( string name, int n)

   {

    thrd = new Thread( this .run);

    number = n;

    thrd.Name = name;

    thrd.Start();

   }

   void run()

   {

    Console.WriteLine(thrd.Name + "正在等待 the mutex" );

    //申请

    shareRes.mutex.WaitOne();

    Console.WriteLine(thrd.Name + "申请到 the mutex" );

    do

    {

     Thread.Sleep(1000);

     shareRes.count--;

     Console.WriteLine( "In " + thrd.Name + "ShareRes.count is " + shareRes.count);

     number--;

    } while (number > 0);

    Console.WriteLine(thrd.Name + "释放 the nmutex" );

    // 释放

    shareRes.mutex.ReleaseMutex();

   }

  }

   

  class Program

  {

   static void Main( string [] args)

   {

    IncThread mthrd1 = new IncThread( "IncThread thread " , 5);

    DecThread mthrd2 = new DecThread( "DecThread thread " , 5);

    mthrd1.thrd.Join();

    mthrd2.thrd.Join();

   }

  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

dy("nrwz");

查看更多关于C#多线程中如何运用互斥锁Mutex的详细内容...

  阅读:46次