Tag:开源 , 源码下载 , 控件 , 控件开发 , 皮肤 , Skin , Socket , 水印 , QQ表情 , 透明控件 , 异步编程 , 多线程编程 , WebService , WCF , WPF , Ribbon , 数据库 , SQL , WinForm教程 , SQLite , 接口 , 抽象类 , 设计模式 , 架构 , 插件 , Visual Studio , P/Invoke , 多线程编程中的锁定(Mutex)
 CS Windows 程序员之窗
 
您的位置: >> 首页 >> C# 博文 >> 多线程编程中的锁定(Mutex)

多线程编程中的锁定(Mutex)

2010-07-25  来自:博客园  字体大小:【  
  • 摘要:mutex 与监视器类似;它防止多个线程在某一时间同时执行某个代码块。现实工作中,我们可以利用Mutex来实现单实例程序的检测。这其实就是对于应用程序级别的并发控制。

mutex 与监视器类似;它防止多个线程在某一时间同时执行某个代码块。事实上,名称“mutex”是术语“互相排斥 (mutually exclusive)”的简写形式。然而与监视器不同的是,mutex 可以用来使跨进程的线程同步。mutex 由 Mutex 类表示。

当用于进程间同步时,mutex 称为“命名 mutex”,因为它将用于另一个应用程序,因此它不能通过全局变量或静态变量共享。必须给它指定一个名称,才能使两个应用程序访问同一个 mutex 对象。

尽管 mutex 可以用于进程内的线程同步,但是使用 Monitor 通常更为可取,因为监视器是专门为 .NET Framework 而设计的,因而它可以更好地利用资源。相比之下,Mutex 类是 Win32 构造的包装。尽管 mutex 比监视器更为强大,但是相对于 Monitor 类,它所需要的互操作转换更消耗计算资源。有关 mutex 的用法示例,请参见 Mutex。

现实工作中,我们可以利用Mutex来实现单实例程序的检测。这其实就是对于应用程序级别的并发控制。

下面是一个例子

using System;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Mutex mutex = null;
            string mutexName = "WindowsApp";
            try
            {
                mutex = Mutex.OpenExisting(mutexName);
                if (mutex != null)
                {
                    MessageBox.Show("该程序已经开始运行");
                    return;
                }
            }
            catch { }
            finally
            {
                mutex = new Mutex(true, mutexName);
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

            mutex.ReleaseMutex();
        }
    }
}
如果是这样编写的代码,那么该应用程序可以运行一个实例,第二次的时
候就会出现一个提醒框
 
作者:瞌睡虫
上一篇:Monitor的用法      
相关文章:
该文章已有条评论 我要发表评论
Website Statisticsflip hd camcorder