Mutex是可以进程间同步的同步基元。

  名称 说明
Mutex()

使用默认属性初始化 Mutex 类的新实例。

Mutex(Boolean)

使用 Boolean 值(指示调用线程是否应具有互斥体的初始所有权)初始化 Mutex 类的新实例。

Mutex(Boolean, String)

使用 Boolean 值(指示调用线程是否应具有互斥体的初始所有权以及字符串是否为互斥体的名称)初始化 Mutex 类的新实例。

Mutex(Boolean, String, Boolean)

使用可指示调用线程是否应具有互斥体的初始所有权以及字符串是否为互斥体的名称的 Boolean 值和当线程返回时可指示调用线程是否已赋予互斥体的初始所有权的 Boolean 值初始化 Mutex 类的新实例。

Mutex(Boolean, String, Boolean, MutexSecurity)

使用可指示调用线程是否应具有互斥体的初始所有权以及字符串是否为互斥体的名称的 Boolean 值和当线程返回时可指示调用线程是否已赋予互斥体的初始所有权以及访问控制安全是否已应用到命名互斥体的 Boolean 变量初始化 Mutex 类的新实例。

 private static Mutex _asyncLocker = new Mutex();
static void Main(string[] args)
{
MutextDemo mutext = new MutextDemo();
int test = ;
Thread th1 = new Thread(() =>
{
for (int i = ; i < ; i++)
Add(ref test);
});
th1.Name = "T1";
Thread th2 = new Thread(() =>
{
for (int i = ; i < ; i++)
Add(ref test, );
});
th2.Name = "T2";
Thread th3 = new Thread(() =>
{
for (int i = ; i < ; i++)
Add(ref test, );
});
th3.Name = "T3";
Thread th4 = new Thread(() =>
{
for (int i = ; i < ; i++)
Add(ref test, );
});
th4.Name = "T4";
Thread th5 = new Thread(() =>
{
for (int i = ; i < ; i++)
Add(ref test, );
});
th5.Name = "T5"; th1.Start();
th2.Start();
th3.Start();
th4.Start();
th5.Start(); Console.ReadKey();
} public static void Add(ref int value, int sleep = )
{
_asyncLocker.WaitOne();
int temp = value;
Thread.Sleep(sleep);
value = temp + ;
Console.WriteLine($"{Thread.CurrentThread.Name} : {value}");
_asyncLocker.ReleaseMutex();
}

Mutex示例代码

使用时,WaitOne函数与ReleaseMutex函数必须配对使用。

System.Object
  System.MarshalByRefObject
    System.Threading.WaitHandle
      System.Threading.Mutex
MarshalByRefObject 类 允许在支持远程处理的应用程序中跨应用程序域边界访问对象。
 

互斥量相对于临界区更为高级,可以对互斥量进行命名,支持跨进程的线程同步。互斥量是调用的Win32的API对互斥锁的操作,因此在同一操作系统下不同进程可以按照互斥锁的名称共享锁。

正因为如此,互斥锁的操作会调用系统资源,性能上相对于临界区也有降低。对于进程内的线程同步使用临界区性能会更佳

参考链接:

http://www.myexception.cn/asp-dotnet/2112687.html

最新文章

  1. C# lambda表达式(简单易懂)
  2. items2 配色
  3. JavaScript 正则表达式上——基本语法
  4. IP访问SQL数据库设置
  5. 100个常用的linux命令
  6. 关于scp 不需要密码
  7. java 解析国密SM2算法证书
  8. Santa Claus and a Palindrome
  9. JQuery 相关用法和操作
  10. C#高性能大容量SOCKET并发(八):通讯协议
  11. [转]关于OpenGL的绘制上下文
  12. SAMTOOLS使用 SAM BAM文件处理
  13. 基于MVC 的Quartz.Net组件实现的定时执行任务调度
  14. VSTO:使用C#开发Excel、Word【17】
  15. python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题
  16. python DRF操作流程
  17. 2019-03-25-day018-面向对象
  18. 洛谷3084 [USACO13OPEN]照片Photo
  19. django项目一 CRM表结构
  20. spring boot: freemarket模板引擎

热门文章

  1. What’s that ALUA exactly?
  2. Centos7部署CephFS
  3. 装饰器1、无参数的装饰器 2、有参数的装饰器 3、装饰器本身带参数的以及如果函数带return结果的情况
  4. PHP - Swoole websocket理解
  5. python开发调用基础:模块的调用&amp;制作包&amp;软件开发规范
  6. 请尽可能详尽的解释AJAX的工作原理
  7. Windows nvidia显卡的设置方法
  8. SpringMVC 接收表单数据的方式
  9. MSComm 串口
  10. 虚拟机之 Wordpress博客搭建