【问题标题】:Bool Accessible By Multiple Processes of Application多个应用程序进程可访问的布尔值
【发布时间】:2011-10-13 20:07:57
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

    标签: c# multithreading process mutex multitasking


    【解决方案1】:

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

    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 作为名称的一部分,以防止与其他应用发生命名冲突。

    【讨论】:

    • 感谢您的帮助,但 Philipp 先发帖,所以我接受了他的回答。 +1 虽然
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      相关资源
      最近更新 更多