Mutex.WaitAll和Semaphore.WaitOne同时

时间:2019-05-20 07:52:23

标签: c# multithreading

我正在开发一个多线程程序,其中有多个互斥对象,我想对它们进行WaitAll操作。但同时我也希望能够在信号量上接收信号。这样的东西(伪代码):

Mutex.WaitAll(arrMutexes) || semSignal.WaitOne()

互斥锁告诉我所有子线程都处于空闲状态,而信号量可以从另一个进程发出信号。

有没有一种方法可以不使用循环?如果可能的话,我还想知道是信号互斥还是信号量。

编辑: 流程说明:

子线程正在执行某些工作,并且可能依赖于另一个或多个其他线程处于活动状态。因此,我只能在所有线程空闲时终止它们。即使所有进程都不空闲,也可以从另一个进程发出信号量以告知该进程终止。

1 个答案:

答案 0 :(得分:0)

您应该能够通过创建另一个'mutexWait'线程来实现自己的愿望,该线程的唯一目的是在互斥量数组上使用waitAll,并在满足该条件时发出'mutexesAquired'信号灯。

然后,您现有的线程可以在MutexesAquired和进程间信号量上等待Wait,然后返回的结果将指示已按“常规”方式触发了哪个信号。

相关问题