Bool, доступный несколькими процессами приложения - PullRequest
0 голосов
/ 14 октября 2011

У меня одновременно работает несколько экземпляров консольного приложения ac #.Пока кто-то выполняет определенную задачу, никто другой не должен выполнять эту же задачу.Поэтому в идеале я хотел бы иметь в памяти какой-нибудь общедоступный объект bool, который все экземпляры могут проверить перед началом выполнения этой задачи.Если бул правда, им нужно подождать.Процесс, выполняющий задачу, установит для bool значение false по окончании.
Я знаю, что "мьютекс" существует, но я не уверен, как его реализовать или это то, что мне нужно для этого.Какой процесс создает эту переменную в памяти?Как другие узнают, где в памяти его найти?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

4 голосов
/ 14 октября 2011

Один из способов сделать это - использовать 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 в качестве части имени, чтобы исключить возможность конфликта имен с другим приложением.

2 голосов
/ 14 октября 2011

Вам необходимо использовать общесистемный Mutex , который вы можете создать, указав имя. Посмотрите пример для конструктора Страница MSDN.

...