千家信息网

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

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,本篇内容主要讲解"C#多线程中的互斥锁Mutex怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#多线程中的互斥锁Mutex怎么用"吧!一、简介Mu
千家信息网最后更新 2025年01月17日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怎么用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

线程 C# 方法 内容 更多 案例 结果 资源 学习 运行 不同 实用 更深 两个 代价 代码 信号 兴趣 功能 实用性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库设计开发的意义 我的世界极限生存服务器附魔石 应用软件开发工具三个基本功能 高一计算机网络技术书 a股网络安全公司有那些 北辰区网络安全委员 重庆前端软件开发大概多少钱 网络安全手抄报的内容有 洪洞县法院网络安全等级保护中标 魔兽世界克隆服务器 数据库课程设计郭学俊 苏州网络安全年会 教育软件开发的企业描述 上海品歆网络技术有限公司 网络安全法法心得体会 电信哪个区服务器好 新知讯网络技术有限公司招聘 慈溪游戏软件开发外包 开了黑魂3不能连接服务器 网络安全宣传2018 软件开发公司哪家价格实惠 网络安全革命支撑 网络安全教育软件 城市天际线用不用开启服务器 网络技术的象征图案 关于加强网络安全教育方案 云服务器费用 代驾app 怎么组织人员进行软件开发 武汉众乐商通网络技术骗子 分布式事务中数据库安装
0