我有一个互斥锁,它控制从多个线程对单个对象的访问。当线程完成时,互斥锁被解锁以允许订单线程对对象进行操作。在使用 WaitForSingleObject 函数的 Windows 上,是否有线程发出信号的顺序?我希望现在允许尝试锁定互斥锁的第一个线程锁定互斥锁。这将是一个 FIFO 队列,因此向阻塞线程发出的信号不是随机的。我是否必须实现自己的排队机制来实现这一点?如果是这样,哪些功能有用?
问问题
3453 次
4 回答
0
是的,如果您想要一个 FIFO 队列,您需要实现自己的排队机制。
于 2009-10-09T18:44:42.727 回答
0
如果您希望解锁按 FIFO 顺序进行,您可以使用自定义锁。ACE 中存在 FIFO 锁;它被称为 ACE_Token,由于它是开源的,也许您可以将其用作参考实现。我认为使用它的开销将是最小的。
于 2009-10-11T10:39:19.953 回答
0
Windows 进行自己的调度的方法是使用光纤。主线程将在互斥体上等待,一旦它返回,您就可以从线程安全队列 (FIFO) 中显式调用 SwitchToFiber。
- 调用 SwitchToFiber 的线程需要调用 ConvertThreadToFiber
- SwitchToFiber 中的函数应该从 QUEUE 调用 SwitchToFiber
于 2009-10-14T11:13:10.900 回答