我正在开发一个多线程程序,其中有多个互斥对象,我想对它们进行WaitAll操作。但同时我也希望能够在信号量上接收信号。这样的东西(伪代码):
Mutex.WaitAll(arrMutexes) || semSignal.WaitOne()
互斥锁告诉我所有子线程都处于空闲状态,而信号量可以从另一个进程发出信号。
有没有一种方法可以不使用循环?如果可能的话,我还想知道是信号互斥还是信号量。
编辑: 流程说明:
子线程正在执行某些工作,并且可能依赖于另一个或多个其他线程处于活动状态。因此,我只能在所有线程空闲时终止它们。即使所有进程都不空闲,也可以从另一个进程发出信号量以告知该进程终止。
答案 0 :(得分:0)
您应该能够通过创建另一个'mutexWait'线程来实现自己的愿望,该线程的唯一目的是在互斥量数组上使用waitAll,并在满足该条件时发出'mutexesAquired'信号灯。
然后,您现有的线程可以在MutexesAquired和进程间信号量上等待Wait,然后返回的结果将指示已按“常规”方式触发了哪个信号。