c# - Mutex.WaitAll 和 Semaphore.WaitOne 同时
问题描述
我正在开发一个多线程程序,其中我有一组互斥体,我想对其执行 WaitAll 操作。但同时我也希望能够在信号量上接收信号。像这样的东西(伪代码):
Mutex.WaitAll(arrMutexes) || semSignal.WaitOne()
Mutexes 告诉我我所有的子线程都是空闲的,而 Semaphore 可以从另一个进程发出信号。
有没有办法在不使用循环的情况下做到这一点?如果可能的话,我还希望能够判断是互斥体还是信号量发出信号。
编辑:过程说明:
子线程正在执行一些工作,并且可能依赖于一个或多个其他线程才能处于活动状态。因此,我只能在它们都空闲时终止线程。信号量可以从另一个进程发出信号,告诉该进程终止,即使所有进程都不是空闲的。
解决方案
您应该能够通过创建另一个“mutexWait”线程来实现您的愿望,该线程的唯一目的是在互斥体数组上等待所有,当满足时,发出一个“mutexesAquired”信号量。
然后,您现有的线程可以在 mutexesAquired 和您的进程间信号量上 WaitOne,然后返回的结果指示哪个信号已以“通常”方式触发。
推荐阅读
- angular - 如何使用模式验证器“仅添加大于 0 的数字”?
- reactjs - Jest 快照测试失败,因为将 ShallowWrapper 添加到快照
- python - 如何在python中首先打印带有空字符串的排序列表
- php - 使用 JSON 发送 2 个变量
- c# - 在 Blazor Wasm 中使用 HttpClient 上传进度
- php - 如何通过 formbuilder 将日期存储到我的数据库中?
- python-3.x - 如何退出 if 语句并回到开头
- python - 如何使用 pandas 查找相应的编码元素
- node.js - 使用 lambda 扫描 AWS S3 存储桶中的文件以查找病毒
- macos - 如何使用适用于 macOS 的 Visual Studio 代码为外部 Mac 应用商店签署和公证电子应用程序构建?