Синхронизация 2 процессов с использованием объектов межпроцессной синхронизации - Mutex или AutoResetEvent

Рассмотрим следующий сценарий: I ' m запускает мое приложение, которое во время своего выполнения должно запускать другой процесс, и только после того, как этот второй процесс завершит внутреннюю специфическую инициализацию, мой первый процесс будет продолжен. Например:

...
// Process1 code does various initializations here
Process.Start("Process2.exe");
// Wait until Process2 finishes its initialization and only then continue (Process2 doesn't exit)
...

Я вижу несколько вариантов:

  1. Mutex - Mutex приходит на ум автоматически при рассмотрении межпроцессного взаимодействия, однако я могу ' Я не вижу способа заставить Process1 ждать мьютекса, который он сгенерировал сам. Я могу заставить Process2 создать мьютекс и ждать на Process1, пока он не будет создан (используя опрос и функцию Mutex.OpenExisting)
  2. AutoResetEvent - они идеально подходят для этой задачи, однако, похоже, что в .NET их нельзя использовать для межпроцессного взаимодействия.
  3. CreateEvent - Я могу использовать P / Invoke и использовать функцию Win32 CreateEvent. Теоретически он мог бы предоставить мне все, что мне нужно. Однако я бы предпочел не использовать собственные функции, если это возможно.
  4. Использовать внешний файл - Самый простой способ - просто использовать некоторый внешний объект ОС (файл, реестр и т. Д.). Однако это кажется довольно хакерским.

Буду рад услышать ваше мнение по этому делу.

Спасибо!

15
задан VitalyB 8 November 2010 в 12:44
поделиться