Phi*_*uil 6 c c++ multithreading mutex semaphore
在只有事件[1],互斥体和信号量[2]的平台上,我可以创建一个公平的"等待多个事件"实现,当任何事件[3]被发出信号/设置时返回.我假设现有的原语是公平的.
[1]事件是一个"标志",有4个操作:Set(),Clear(),Wait()和WaitAndClear().如果你在一个未设置的事件上等待(),你就会阻塞,直到某人Set()为止.WaitAndClear()听起来像是原子的.所有的服务员都被唤醒了.
[2]我不相信系统支持信号量值变为负值.
[3]我说"事件",但它可能是一个使用任何这些原语的新对象类型.
对于 Windows,将第三个参数设置为 false 的WaitForMultipleObjects应该可以工作(还包括超时选项)。我还看到在 X86 (80186) 嵌入式设备中使用的内部开发的小内核实现了类似的等待函数。对于内部内核,如果最大线程数是固定的,则每个事件、信号量……都可以具有一个任务控制块地址数组,用于该对象上挂起的任何线程。另一种选择是制定一条规则,即只有一个线程可以等待任何事件、信号量……(对于包含 null 或挂起任务控制块的地址的每种对象类型只有一个条目),并且在这种情况下当需要触发多个线程时,将使用多个事件或信号量。