Mutex 构造函数 (Boolean, String, Boolean)

  1. public Mutex (
  2. bool initiallyOwned,
  3. string name,
  4. out bool createdNew
  5. )

参数

initiallyOwned

如果为 true,则给予调用线程已命名的系统互斥体的初始所属权(如果已命名的系统互斥体是通过此调用创建的);否则为 false

name

Mutex 的名称。如果值为 空引用(在 Visual Basic 中为 Nothing),则 Mutex 是未命名的。

createdNew
       如果调用线程已被授予互斥体的初始所属权,则此方法返回时包含布尔值 true;否则包含布尔值 false。该参数未经初始化即被传递
一、当Mutex已存在的时候
  1. static void Main(string[] args)
  2. {
  3. Thread th1 = new Thread(Thread1);
  4. Thread th2 = new Thread(Thread2);
  5. th1.Start();
  6. th2.Start();
  7. Console.ReadKey();
  8. }
  9. public static void Thread1()
  10. {
  11. bool bCreatedNewMutex;
  12. Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex); //如果名为"HAHA"的互斥锁不存在,返回参数bCreatedNewMutex为true,否则为false
  13. if (bCreatedNewMutex) //如果名为“HAHA”的互斥锁不存在
  14. {
  15. Console.WriteLine("th1装逼成功");
  16. }
  17. else
  18. {
  19. Console.WriteLine("th1装逼失败");
  20. }
  21. }
  22. public static void Thread2()
  23. {
  24. bool bCreatedNewMutex;
  25. Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex);
  26. if (bCreatedNewMutex)
  27. {
  28. Console.WriteLine("th2装逼成功");
  29. }
  30. else
  31. {
  32. Console.WriteLine("th2装逼失败");
  33. }
  34. }

二、使用了垃圾回收

  1. static void Main(string[] args)
  2. {
  3. Thread th1 = new Thread(Thread1);
  4. Thread th2 = new Thread(Thread2);
  5. th1.Start();
  6. th2.Start();
  7. Console.ReadKey();
  8. }
  9. public static void Thread1()
  10. {
  11. bool bCreatedNewMutex;
  12. Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex);
  13. if (bCreatedNewMutex)
  14. {
  15. Console.WriteLine("th1装逼成功");
  16. }
  17. else
  18. {
  19. Console.WriteLine("th1装逼失败");
  20. }
  21. }
  22. public static void Thread2()
  23. {
  24. Thread.Sleep(); //作用是等th1执行完毕,否则会报错:由于出现被放弃的 mutex,等待过程结束。
  25. GC.Collect();
  26. GC.WaitForPendingFinalizers();
  27. bool bCreatedNewMutex;
  28. Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex);
  29. m.WaitOne();
  30. if (bCreatedNewMutex)
  31. {
  32. Console.WriteLine("th2装逼成功");
  33. }
  34. else
  35. {
  36. Console.WriteLine("th2装逼失败");
  37. }
  38. m.ReleaseMutex();
  39. }

C# Mutex互斥锁的更多相关文章

  1. RWLock——一种细粒度的Mutex互斥锁

    RWMutex -- 细粒度的读写锁 我们之前有讲过 Mutex 互斥锁.这是在任何时刻下只允许一个 goroutine 执行的串行化的锁.而现在这个 RWMutex 就是在 Mutex 的基础上进行 ...

  2. golang mutex互斥锁分析

    互斥锁:没有读锁写锁之分,同一时刻,只能有一个gorutine获取一把锁 数据结构设计: type Mutex struct { state int32 // 将一个32位整数拆分为 当前阻塞的gor ...

  3. Go 标准库 —— sync.Mutex 互斥锁

    Mutex 是一个互斥锁,可以创建为其他结构体的字段:零值为解锁状态.Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁. 方法 func (*Mutex) Lock func (m *Mut ...

  4. C# mutex互斥锁构造

    概念 Mutext 出现的比monitor更早,而且传承自COM,当然,waitHandle也是它的父类,它继承了其父类的功能,有趣的是Mutex的脾气非常的古怪,它 允许同一个线程多次重复访问共享区 ...

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

    Mutex:互斥(体) 又称同步基元. 当创建一个应用程序类时,将同时创建一个系统范围内的命名的Mutex对象.这个互斥元在整个操作系统中都是可见的.当已经存在一个同名的互斥元时,构造函数将会输出一个 ...

  6. 互斥锁Mutex与信号量Semaphore的区别

    转自互斥锁Mutex与信号量Semaphore的区别 多线程编程中,常常会遇到这两个概念:Mutex和Semaphore,两者之间区别如下: 有人做过如下类比: Mutex是一把钥匙,一个人拿了就可进 ...

  7. Golang 读写锁RWMutex 互斥锁Mutex 源码详解

    前言 Golang中有两种类型的锁,Mutex (互斥锁)和RWMutex(读写锁)对于这两种锁的使用这里就不多说了,本文主要侧重于从源码的角度分析这两种锁的具体实现. 引子问题 我一般喜欢带着问题去 ...

  8. 探索互斥锁 Mutex 实现原理

    Mutex 互斥锁 概要描述 mutex 是 go 提供的同步原语.用于多个协程之间的同步协作.在大多数底层框架代码中都会用到这个锁. mutex 总过有三个状态 mutexLocked: 表示占有锁 ...

  9. day 7-4 互斥锁与队列

    一. 基本定义 互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制.该目的通过将代码切片成一个 ...

随机推荐

  1. linux命令学习笔记(47):iostat命令

    Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视. 它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况. ...

  2. redis cluster 实践总结

      最近项目接触到了redis cluster,现在趁着使用做一下总结,记录一下遇到过的问题,简单的概述一下常用到的命令和功能. 本篇文章主要是以运维的角度去讲述如何去更好的规划redis clust ...

  3. HDU5692 Snacks

    HDU5692 Snacks Problem Description 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的 ...

  4. Ubuntu——跟新flash

    使用命令: apt-get install adobe-flashplugin 即可

  5. 机器学习、图像识别方面 书籍推荐 via zhihu

    机器学习.图像识别方面 书籍推荐 作者:小涛 链接:https://www.zhihu.com/question/20523667/answer/97384340 来源:知乎 著作权归作者所有.商业转 ...

  6. NFS资料

      Linux NFS服务器的安装与配置 http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html Linux NFS服务器的安装与配 ...

  7. HTML5学习笔记(三)新属性、功能

    HTML5 拖放 1.元素的 draggable 属性设置为 true 2.ondragstart 属性调用函数,函数中dataTransfer.setData() 方法设置被拖数据的数据类型和值 3 ...

  8. DIV文字水平垂直居中的方法

    水平居中 text-align:center 垂直居中(vertical-align) vertical-align:middle; vertical-align时而没效果 然而真实使用的时候,我们会 ...

  9. Weekly Contest 112

    945. Minimum Increment to Make Array Unique Given an array of integers A, a move consists of choosin ...

  10. ps图层混合计算公式

    样式效果 http://www.jb51.net/photoshop/104100.html 注释: 1.混合模式的数学计算公式,另外还介绍了不透明度. 2.这些公式仅适用于RGB图像,对于Lab颜色 ...