• 【深度好文】多线程之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
  • 相关阅读:
    利用expect实现自动化操作
    svn项目权限控制
    linux jdk环境变量
    Google Authenticator加强ssh安全
    k8s之configmap配置中心
    .NET面试题目二
    .NET面试题目一
    经典.net面试题目(3)
    经典.net面试题目(2)
    经典.net面试题目(1)
  • 原文地址:https://www.cnblogs.com/x-poior/p/6305828.html
Copyright © 2020-2023  润新知