千家信息网

C#多线程中的互斥锁Mutex怎么用

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"C#多线程中的互斥锁Mutex怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#多线程中的互斥锁Mutex怎么用"吧!一、简介Mu
千家信息网最后更新 2025年11月07日C#多线程中的互斥锁Mutex怎么用

本篇内容主要讲解"C#多线程中的互斥锁Mutex怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#多线程中的互斥锁Mutex怎么用"吧!

一、简介

Mutex的突出特点是可以跨应用程序域边界对资源进行独占访问,即可以用于同步不同进程中的线程,这种功能当然这是以牺牲更多的系统资源为代价的。

主要常用的两个方法:

  • public virtual bool WaitOne() 阻止当前线程,直到当前 System.Threading.WaitHandle 收到信号获取互斥锁。

  • public void ReleaseMutex() 释放 System.Threading.Mutex 一次。

二、代码

案例一:

    class Program    {        private static Mutex mutex = new Mutex();        static void Main(string[] args)        {            Thread[] thread = new Thread[3];            for (int i = 0; i < 3; i++)            {                thread[i] = new Thread(ThreadMethod1);//方法引用                thread[i].Name = "Thread-" + (i+1).ToString();            }            for (int i = 0; i < 3; i++)            {                thread[i].Start();            }            Console.ReadKey();        }        public static void ThreadMethod1(object val)        {                       mutex.WaitOne();    //获取锁            for (int i = 1; i <=5; i++)            {                Console.WriteLine("{0}循環了{1}次", Thread.CurrentThread.Name, i);            }            mutex.ReleaseMutex();  //释放锁        }    }

运行结果:

案例二:

    class Program    {        private static Mutex mutex = new Mutex();        private static int sum = 0;        static void Main(string[] args)        {            Task task = new Task(ThreadFunction);            task.Start();            Console.WriteLine($"{DateTime.Now} task started!");            Thread.Sleep(2000);//Main主線程            Console.WriteLine($"{DateTime.Now} Get siginal in Main!");            mutex.WaitOne();            Console.WriteLine($"{DateTime.Now} Get siginal in main!");            Console.WriteLine($"{DateTime.Now} Result is {task.Result}");            Console.ReadKey();        }        private static int ThreadFunction()        {            Console.WriteLine($"{DateTime.Now} Get siginal in ThreadFunction!");            mutex.WaitOne();  //获取锁            for (int i = 0; i <= 10; i++)            {                sum += i;                Thread.Sleep(1000);            }            Console.WriteLine($"{DateTime.Now} Release mutex in ThreadFunction!");            mutex.ReleaseMutex();  //释放锁            return sum;        }    }

运行结果:

到此,相信大家对"C#多线程中的互斥锁Mutex怎么用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0