Bool可由应用程序的多个进程访问
本文关键字:进程 访问 应用程序 Bool | 更新日期: 2023-09-27 18:11:16
我有一个c#控制台应用程序的多个实例同时运行。当一个人执行一项特定的任务时,其他人不应该执行相同的任务。因此,理想情况下,我希望在内存中有一些通常可访问的bool值,以便所有实例在开始执行该任务之前都可以检查。如果bool值为真,则需要等待。执行该任务的进程将在任务完成时将bool值设置为false。
我知道"互斥"存在,但我不确定如何实现它,或者如果它是我需要的。哪个进程在内存中创建了这个变量?其他的怎么知道在内存的哪里找到它?
一种方法是使用互斥锁,因为要跨进程执行此操作,因此需要使用命名互斥锁:
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页面的示例。