Bool可通过多个应用程序访问

时间:2011-10-13 20:07:58

标签: c# multithreading process mutex multitasking

我有多个同时运行的c#控制台应用程序实例。当一个人正在执行特定任务时,没有其他人应该执行相同的任务。理想情况下,我希望在内存中有一些常用的bool,所有实例都可以在开始执行该任务之前检查。如果布尔是真的,他们需要等待。执行任务的过程会在完成时将bool设置为false 我知道“互斥”存在,但我不确定如何实现它,或者它是否是我需要的。哪个进程在内存中创建此变量?其他人如何知道在记忆中找到它?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

实现此目的的一种方法是使用Mutex,因为您跨进程执行此操作,您将需要使用命名的互斥锁:

public class App
{
    static Mutex SingleInstanceMutex = new Mutex(false, "MyApp{2CA3B0BE-26B7-46d3-9CF3-234B9EFE8681}");

    public static void Main()
    {

        while(true)
        {
            if (SingleInstanceMutex.WaitOne(TimeSpan.Zero, true));
            {
               Console.WriteLine("Only one process can be doing this at a time")
               SingleInstanceMutex.ReleaseMutex();
            }

        }
    }

}

我喜欢使用guid作为名称的一部分,以防止与其他应用程序发生命名冲突的可能性。

答案 1 :(得分:2)

您需要使用system-wide Mutex,您可以通过提供名称来创建。查看example for the constructor MSDN页面。