多个应用程序进程可访问的布尔值

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 页面。

【讨论】:

以上是关于多个应用程序进程可访问的布尔值的主要内容,如果未能解决你的问题,请参考以下文章

检索和更新存储过程中的第一行 - 由多个进程访问

查看进程之ps命令

Python第七天_布尔值的应用

LINUX:程序和进程

Linux之进程管理

Linux进程与计划任务