zoukankan      html  css  js  c++  java
  • 【深度好文】多线程之WaitHandle-->派生-》Mutex信号量构造

     bool flag = false;
                System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag);
                //第一个参数:true--给调用线程赋予互斥体的初始所属权
                //第一个参数:互斥体的名称
                //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true
                if (flag)
                {
                    Console.Write("Running");
                }
                else
                {
                    Console.Write("Another is Running");
                    System.Threading.Thread.Sleep(5000);//线程挂起5秒钟
                    Environment.Exit(1);//退出程序
                }
    当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。
    [csharp] view plain copy
    private static Mutex mut = new Mutex();  
    
    两个线程访问资源需要互斥时,两个线程都要用互斥锁。
    
    线程A:
    [csharp] view plain copy
    //安全时才可以访问共享资源,否则挂起。检测到安全并访问的同时会上锁。  
    mut.WaitOne();  
    //代码  
    //...  
    //...  
      
    //释放锁  
    mut.ReleaseMutex();  
    
    
    线程B:
    [csharp] view plain copy
    //安全时才可以访问共享资源,否则挂起。检测到安全并访问的同时会上锁。  
    mut.WaitOne();  
    //代码  
    //...  
    //...  
      
    //释放锁  
    mut.ReleaseMutex();  
    
    参考资料:
     c# 多线程 --Mutex(互斥锁):http://www.cnblogs.com/hsrzyn/articles/1588776.html
    MSDN:http://msdn.microsoft.com/zh-cn/library/01985e8f(v=vs.80).aspx
  • 相关阅读:
    10-vue自定义指令
    09-vue过滤器的基本使用
    vue总结
    07-vue的v-if和v-show
    06-循环数组v-for
    Java通过JNA调用dll或so
    Centos7安装FRP内网穿透工具进行远程连接
    centos7检查Java项目存活与否并重启
    centos7中Java项目重启
    Ubuntu 19.04: Connect to GNOME desktop environment via XRDP
  • 原文地址:https://www.cnblogs.com/x-poior/p/6305828.html
Copyright © 2011-2022 走看看