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