源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c# mutex互斥量的深入解析

  • 时间:2022-04-29 17:34 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c# mutex互斥量的深入解析
[b]互斥锁(Mutex)[/b] 互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。 互斥锁可适用于一个共享资源每次只能被一个线程访问的情况 [b] 函数:[/b] //创建一个处于未获取状态的互斥锁 Public Mutex(); //如果owned为true,互斥锁的初始状态就是被主线程所获取,否则处于未获取状态  Public Mutex(bool owned);  如果要获取一个互斥锁。应调用互斥锁上的WaitOne()方法,该方法继承于Thread.WaitHandle类 它处于等到状态直至所调用互斥锁可以被获取,因此该方法将组织住主调线程直到指定的互斥锁可用,如果不需要拥有互斥锁,用ReleaseMutex方法释放,从而使互斥锁可以被另外一个线程所获取 //Public Mutex(bool owned,name,out flag); name为互斥量的名字,也就是说在操作系统中只有一个命名为name的互斥量mutex,如果一个线程得到这个name的互斥锁,其他线程就无法得到这个互斥锁了,必须等待那个线程对这个线程释放 参考别人的博客的代码实验
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace myConApp {     class Test     {         /// <summary>         /// 应用程序的主入口点。         /// </summary>         [STAThread]         static void Main(string[] args)         {             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);//退出程序             }             Console.ReadLine();         }     } }
 运行以上代码生成的应用程序第一个实例,会得到结果 [b]Running [/b] 保持第一个运行状态,运行第二个实例,得到结果 [b]Another is Running [/b] 以上代码中创建了一个mutex,从其参数的解释中得知,第一个调用线程将得到互斥体的初始所属权,如果不释放的话,其他的线程得不到互斥体所有权 1.运行两个工程,同时将以上代码放入工程中,第一个工程运行,得到结果 Running  保持第一个运行状态,运行第二个工程,得到结果 [b]Another is Running[/b] 2.将一个工程中的System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag);改为 System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test1", out flag); 然后第一个工程运行,得到结果 [b]Running [/b] 保持第一个运行状态,运行第二个工程,得到结果 [b]Running [/b]则说明在系统中,mutex的name是在系统中是唯一的。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部