.NET 4中的多线程编程之三:共享数据(下)
上文介绍的互斥方法都是用于进程间的不同线程的互斥。.NET 提供了不同进程间线程互斥的方法。可以使用named mutex来实现进程间的互斥。named mutex是一个全局的mutex,通过给mutex一个名称,可以在所有进程间有效。注意要仔细选择mutex的名称,避免和其他程序冲突。
using System;
using System.Threading;
using System.Threading.Tasks;
namespace TaskParallel
{
class MainClass
{
public static void Main(string[] args)
{
string mutexName = "Parallel.MainClass";
Mutex globalMutex;
try
{
globalMutex = Mutex.OpenExisting(mutexName);
}
catch (WaitHandleCannotBeOpenedException)
{
globalMutex = new Mutex(false, mutexName);
}
Task t = new Task(() =>
{
while (true)
{
Console.WriteLine("Waiting to acquire Mutex");
globalMutex.WaitOne();
Console.WriteLine("Acquired.Press Enter to release");
Console.ReadLine();
globalMutex.ReleaseMutex();
Console.WriteLine("Released");
}
});
t.Start();
t.Wait();
}
}
}
首先使用Mutex.OpenExist方法来判断是否已经存在该命名mutex,如果不存在,则会抛出一个异常,再使用Mutex(bool,string)构造函数创建新的mutex,第一个参数如果为true,那么这个mutex初始情况下就已经被锁,需要调用mutex.Release()之后才能使用。Mutex还有一个构造函数,可以避免抛出异常,
bool created;
Mutex globalMutex = new Mutex(false, mutexName, out created);
相关新闻>>
- 发表评论
-
- 最新评论 进入详细评论页>>
今日头条
更多>>您可能感兴趣的文章
- MVC3+Entity Framework 实现投票系统(二)
- 使用ASP.NET MVC3+EF+Jquery制作文字直播系统(四
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注
- JQuery+Asp.net MVC实现用户名重名查询
- .NET设计模式:工厂方法模式(Factory Method)[1]
- Web Service学习笔记(4)
- asp.net DataTable和Dataset序列化成Json格式
- .net架构的最后思考(箴言)
- .NET简谈互操作(四:基础知识之Dispose非托管内存
- 聊聊.net程序设计——浅谈使用VS2010建模拓展(下



