Mutex互斥锁的使用方法

同一时刻,只能有一个线程持有该锁!

使用Mutex互斥锁来同步两个单独的程序(可以两次运行该程序,查看运行结果)

     static void Main(string[] args)
        {
            const string MutexName = "CSharpThreadingCookbook";

            using (var m = new Mutex(false, MutexName))
            {
                //WaitOne构造表示指定的时间内(这里是5秒)是否可以获得互斥锁定
                if (!m.WaitOne(TimeSpan.FromSeconds(5), false))
                {
                    //如果当前实例5秒内不能获取到互斥锁(由于其他线程占用锁【第一次运行的程序未回车】,则此不能获取到互斥锁定,所以代码运行这里)
                    Console.WriteLine("Second instance is running!");
                    Console.Read();
                }
                else//获取到互斥锁
                {
                    ////如果当前实例5稍内收到了信号(如果5秒内获得了互斥锁定)【**********第一次运行可以直接进入到这里********】
                    Console.WriteLine("Running!");//在这里执行同步代码
                    Console.ReadLine();//等待输入,或者回车(如果不回车,持续占用互斥锁)
                    m.ReleaseMutex();
                }
            }
        }

使用Mutex互斥锁禁止程序启动两次

     [STAThread]
        static void Main()
        {
            bool createNew;
            using (System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out createNew))
            {
                if (createNew)//如果指定的命名系统互斥体不存在(说明没有程序运行过)
                {
                    Application.Run(new Form1());
                }
                else
                {
                    MessageBox.Show("应用程序已经在运行中...");
                    System.Threading.Thread.Sleep(1000);
                    System.Environment.Exit(1);
                }
            }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

具名的互斥量 是全局的操作系统对象! 请务必正确关闭互斥量。最好使用using代码块包裹互斥量对象。

原文地址:https://www.cnblogs.com/gougou1981/p/12337091.html

时间: 2024-08-06 07:09:55

Mutex互斥锁的使用方法的相关文章

不得不知道的golang之sync.Mutex互斥锁源码分析

针对Golang 1.9的sync.Mutex进行分析,与Golang 1.10基本一样除了将panic改为了throw之外其他的都一样.源代码位置:sync\mutex.go.可以看到注释如下: Mutex can be in 2 modes of operations: normal and starvation. In normal mode waiters are queued in FIFO order, but a woken up waiter does not own the m

【转】【C#】【Thread】Mutex 互斥锁

Mutex:互斥(体) 又称同步基元. 当创建一个应用程序类时,将同时创建一个系统范围内的命名的Mutex对象.这个互斥元在整个操作系统中都是可见的.当已经存在一个同名的互斥元时,构造函数将会输出一个布尔值. 主要应用于控制单程序运行. 比如程序代码通过检测这个布尔值来判断指定的程序实例是否启动,如果已经存在同名互斥元的话,则显示一个对话框,告知用户应用程序已经启动,并退出应用程序. private static Mutex mutex = null; //设为Static成员,是为了在整个程序

mutex互斥锁

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon

互斥锁和条件变量的结合使用

互斥锁一个明显的缺点是他只有两种状态:锁定和非锁定.而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,他常和互斥锁一起使用.使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化.一旦其他的某个线程改变了条件变量,他将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程.这些线程将重新锁定互斥锁并重新测试条件是否满足.一般说来,条件变量被用来进行线承间的同步. 对于条件锁,通常配合一个互斥锁一起使用,以防止多个线程同时请求pt

Linux系统编程——线程同步与互斥:互斥锁

为什么需要互斥锁? 在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源.这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在此刻使用打印机打印东西,如果不做任何处理的话,打印出来的东西肯定是错乱的. 下面我们用程序模拟一下这个过程,线程一需要打印" hello ",线程二需要打印" world ",不加任何处理的话,打印出来的内容会错乱: #include <stdio.h> #include <

互斥锁 笔记

.线程访问机制 任务间的关系有两种:1,间接关系;2,直接关系. 例如1. 任务A对莫个缓冲区进行写操作.任务B从这个缓冲区进行读操作.那么A和B的关系就是直接的关系,那么实现这种直接关系的机制就是同步 2. 任务A要使用打印机,任务b也要使用打印机,那么只有在任务A使用结束的情况下才能使用打印机,所以A和B的关系是间接的关系.那么要实现这种间接的关系的机制是互斥. 在linux中实现线程间的互斥和同步的主要的机制是:信号量和互斥锁 互斥锁 mutex 是一种简单的加锁的方法来控制对共享资源的存

Linux互斥锁、条件变量和信号量

Linux互斥锁.条件变量和信号量  来自http://kongweile.iteye.com/blog/1155490 博客分类: Linux sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享.sem_wait:一直阻塞等待直到信号量>0.sem_timedwait:阻塞等待若干时间直到信号量>0.sem_post:使信号量加1.sem_destroy:释放信号量.和sem_init对应. 进行多线程编程,最应该注意的就是那些共享的数据

Linux 同步方法剖析--内核原子,自旋锁和互斥锁

在学习 Linux® 的过程中,您也许接触过并发(concurrency).临界段(critical section)和锁定,但是如何在内核中使用这些概念呢?本文讨论了 2.6 版内核中可用的锁定机制,包括原子运算符(atomic operator).自旋锁(spinlock).读/写锁(reader/writer lock)和内核信号量(kernel semaphore). 本文还探讨了每种机制最适合应用到哪些地方,以构建安全高效的内核代码. 本文讨论了 Linux 内核中可用的大量同步或锁定

互斥锁概念简单说明和举例

本文内容主要来自博文:Linux系统编程--线程同步与互斥:互斥锁 同时补充以下博文说明: [1]  Linux线程-互斥锁pthread_mutex_t [2]  POSIX 互斥锁: pthread_mutex_t 为什么需要互斥锁? 在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源.这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在此刻使用打印机打印东西,如果不做任何处理的话,打印出来的东西肯定是错乱的. 下面我们用程序模拟一下这个过