多个应用程序进程可访问的布尔值
Posted
技术标签:
【中文标题】多个应用程序进程可访问的布尔值【英文标题】:Bool Accessible By Multiple Processes of Application 【发布时间】:2011-10-13 20:07:57 【问题描述】:我有多个同时运行的 C# 控制台应用程序实例。当一个人在执行一项特定的任务时,其他人不应该执行同样的任务。所以理想情况下,我想在内存中有一些常用的布尔值,所有实例都可以在开始执行该任务之前检查它们。如果布尔值是真的,他们需要等待。执行任务的进程将在完成时将 bool 设置为 false。 我知道存在“互斥锁”,但我不确定如何实现它,或者它是否是我需要的。哪个进程在内存中创建了这个变量?其他人怎么知道在内存中的哪个位置找到它?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:一种方法是使用互斥锁,因为您是跨进程执行此操作,因此您需要使用命名互斥锁:
public class App
static Mutex SingleInstanceMutex = new Mutex(false, "MyApp2CA3B0BE-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 页面。
【讨论】:
以上是关于多个应用程序进程可访问的布尔值的主要内容,如果未能解决你的问题,请参考以下文章