首页 > 解决方案 > Mutex.WaitAll 和 Semaphore.WaitOne 同时

问题描述

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

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

Mutexes 告诉我我所有的子线程都是空闲的,而 Semaphore 可以从另一个进程发出信号。

有没有办法在不使用循环的情况下做到这一点?如果可能的话,我还希望能够判断是互斥体还是信号量发出信号。

编辑:过程说明:

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

标签: c#multithreading

解决方案


您应该能够通过创建另一个“mutexWait”线程来实现您的愿望,该线程的唯一目的是在互斥体数组上等待所有,当满足时,发出一个“mutexesAquired”信号量。

然后,您现有的线程可以在 mutexesAquired 和您的进程间信号量上 WaitOne,然后返回的结果指示哪个信号已以“通常”方式触发。


推荐阅读