Bool доступен для нескольких процессов приложения

#c# #multithreading #process #mutex #multitasking

#c# #многопоточность #процесс #мьютекс #многозадачность

Вопрос:

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

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

Ответ №1:

Один из способов сделать это — использовать мьютекс, поскольку вы делаете это в разных процессах, вам нужно будет использовать именованный мьютекс:

 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. Спасибо за вашу помощь, но Филипп опубликовал первым, поэтому я принял его ответ. 1, хотя

Ответ №2:

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