C# 中线程资源访问互斥量
2016-02-29 20:44
309 查看
使用mutex,进行互斥访问
示例中运行第一个窗口显示running
此时运行第二个窗口显示 空白 处于等待。若在5秒内在第一个窗口中输入,将释放资源,此时第二个窗口将显示running
using System;
using System.Threading;
namespace MutexDemo
{
class Program
{
static void Main(string[] args)
{
const string MutexName = "Demo";
Console.WriteLine("mutex name {0}", MutexName);
using (var m = new Mutex(false, MutexName))
//开启第二个窗口时,以下方式将不会回馈m状态,以上方式可以
//using (var m = new Mutex(false, MutexName))
{
if (!m.WaitOne(TimeSpan.FromSeconds(5), false))
Console.WriteLine("second instance is running");
else
{
Console.WriteLine("running");
//按键后释放资源
Console.ReadLine();
m.ReleaseMutex();
}
}
Console.WriteLine("main thread waiting for a key");
Console.ReadKey();
}
}
}
若将using (var m = new Mutex(false, MutexName))改为
using (var m = new Mutex(false, MutexName))则第一个窗口释放资源后,第二个窗口也不会取得资源;即mutex的初始权仅归第一个窗口所有
示例中运行第一个窗口显示running
此时运行第二个窗口显示 空白 处于等待。若在5秒内在第一个窗口中输入,将释放资源,此时第二个窗口将显示running
using System;
using System.Threading;
namespace MutexDemo
{
class Program
{
static void Main(string[] args)
{
const string MutexName = "Demo";
Console.WriteLine("mutex name {0}", MutexName);
using (var m = new Mutex(false, MutexName))
//开启第二个窗口时,以下方式将不会回馈m状态,以上方式可以
//using (var m = new Mutex(false, MutexName))
{
if (!m.WaitOne(TimeSpan.FromSeconds(5), false))
Console.WriteLine("second instance is running");
else
{
Console.WriteLine("running");
//按键后释放资源
Console.ReadLine();
m.ReleaseMutex();
}
}
Console.WriteLine("main thread waiting for a key");
Console.ReadKey();
}
}
}
若将using (var m = new Mutex(false, MutexName))改为
using (var m = new Mutex(false, MutexName))则第一个窗口释放资源后,第二个窗口也不会取得资源;即mutex的初始权仅归第一个窗口所有
相关文章推荐
- C# WinForm使用乐器数字接口
- C# 观察者模式.
- C# 观察者模式.
- C# 命令模式
- C# 命令模式
- C# string类Remove函数未生效
- C#操作目录和文件
- C# 获取指定目录下所有文件信息、移动目录、拷贝目录
- pp看书笔记---C#高级编程第九版 第九章 【字符串和正则表达式】
- (整理)C#实现UDP广播
- C# Split 字符串转成List<int>
- C#中使用DirectSound录音
- C#判断上传文件是否是图片,防止木马上传
- protobuf-net 与 C#中几种序列化的比较
- C#应用开发与单例模式
- 对c# 反射机制的理解
- C# user32.dll
- C# 子窗体关闭父窗体的简单方法
- C# winform实现异步导出功能
- C#遍历DataSet中数据的几种方法总结