[.net 多线程]Mutex
2024-09-18 19:44:19
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函数必须配对使用。
MarshalByRefObject 类 允许在支持远程处理的应用程序中跨应用程序域边界访问对象。
互斥量相对于临界区更为高级,可以对互斥量进行命名,支持跨进程的线程同步。互斥量是调用的Win32的API对互斥锁的操作,因此在同一操作系统下不同进程可以按照互斥锁的名称共享锁。
正因为如此,互斥锁的操作会调用系统资源,性能上相对于临界区也有降低。对于进程内的线程同步使用临界区性能会更佳。
参考链接:
最新文章
- C# lambda表达式(简单易懂)
- items2 配色
- JavaScript 正则表达式上——基本语法
- IP访问SQL数据库设置
- 100个常用的linux命令
- 关于scp 不需要密码
- java 解析国密SM2算法证书
- Santa Claus and a Palindrome
- JQuery 相关用法和操作
- C#高性能大容量SOCKET并发(八):通讯协议
- [转]关于OpenGL的绘制上下文
- SAMTOOLS使用 SAM BAM文件处理
- 基于MVC 的Quartz.Net组件实现的定时执行任务调度
- VSTO:使用C#开发Excel、Word【17】
- python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题
- python DRF操作流程
- 2019-03-25-day018-面向对象
- 洛谷3084 [USACO13OPEN]照片Photo
- django项目一 CRM表结构
- spring boot: freemarket模板引擎