当前位置: 移动技术网 > IT编程>开发语言>c# > C#多线程中如何运用互斥锁Mutex

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
互斥锁(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();
  }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网