Мне интересно, как безопасно изменить во время выполнения EventWaitHandle, что поток должен ждать.
Предположим, например, что есть два потока (A и C), которые синхронизируются через EventWaitHandles. A выполняет свою работу циклически, а C ожидает, пока не получит уведомление от A о том, что он может начать выполнять свою работу (например, с помощью AutoResetEvent). Узор A-C-A-C ...
Позже запускается новый поток (B) (например, действием пользователя), и его задание должно выполняться между двумя ранее существовавшими потоками следующим образом: A выполняет свою работу, затем сигнализирует B, а когда B завершает свою работу, сигнализирует C Теперь шаблон ABCABC ...
Таким образом, до того, как поток C ожидал на EventWaitHandle, совместно используемом с A, и позже должен быть безопасный механизм, который заставляет C ожидать другого EventWaitHandle, совместно используемого с B. Мне кажется, что сложная часть заменяет EventWaitHandle, используемый C, поскольку, как только это будет сделано, я легко смогу запустить B, который будет использовать EventWaitHandle для ожидания задания A и EventWaitHandle для подачи сигнала на задание C. Механизм также должен обеспечивать способ безопасного демонтажа потока B и возврата к исходной ситуации, когда работают только потоки A и C.
Есть ли безопасный способ сделать это с помощью EventWaitHandle? Если нет, то любые другие предложения будут оценены.