Bool可由应用程序的多个进程访问

本文关键字:进程 访问 应用程序 Bool | 更新日期: 2023-09-27 18:11:16

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

Bool可由应用程序的多个进程访问

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

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作为名称的一部分,以防止任何与其他应用程序命名冲突的可能性。

您需要使用一个系统范围的互斥锁,您可以通过提供一个名称来创建它。查看构造函数MSDN页面的示例。