1

我正在尝试同时访问一些资源,所以我正在使用lock.

object lockObject = new object();
lock(lockObject)
{
    //Acquire some resources and do some operations  
}
//Pulse only the most recently joined thread in waiting list

但我想要的只是只脉冲最后一个线程(等待列表中最近加入的线程)并忽略其他线程(死锁、中止或饥饿不是这里的问题)。我能想到的一种选择是使用消息队列并忽略除处理最后一条消息之外的所有消息。除此之外,我怎么能简单地脉冲最后一个线程而忽略其他线程?

4

1 回答 1

1

有很多方法可以实现这一点。这是一种方法。

您将拥有一个“线程管理器”,每个线程都会调用它来“等待”资源。

这个线程管理器本质上将管理一堆WaitHandles。当一个线程调用管理器时,它会创建一个新的,并将其推入堆栈,然后将实例交给线程,它可以等待。WaitHandle

当您的代码想让最后一个等待线程进入pulse时,它将从堆栈中弹出最顶部的等待句柄,然后signal它。

(请注意,此架构依赖于调用线程在 WaitHandle 上等待。)

高温高压

于 2012-12-06T06:56:50.673 回答