.NET 4中的多线程编程之三:共享数据(下)

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 07:32 点击:

上文介绍的互斥方法都是用于进程间的不同线程的互斥。.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);

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • 浅析.NET下XML数据访问新机制
      • asp.net 面试+笔试题目第1/2页
      • C# 邮件地址是否合法的验证
      • asp.net 设置GridView的选中行的实现代码
      • C#高级编程:数据库连接[1]
      • 经典C++程序1
      • IIS 自动回收导致后台定时器失效的问题解决
      • ASP.NET GridView列表代码示例
      • Asp.net MVC源码分析--Action Filter的链式调用
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1