C# 如何脉冲等待列表中的最后一个线程?

C# 如何脉冲等待列表中的最后一个线程?,c#,locking,C#,Locking,我试图同时访问一些资源,所以我使用了lock object lockObject = new object(); lock(lockObject) { //Acquire some resources and do some operations } //Pulse only the most recently joined thread in waiting list 但我想要的只是只脉冲最后一个线程(等待列表中最近加入的线程),而忽略其他线程(这里不关心死锁、中止或饥饿)。 我

我试图同时访问一些资源,所以我使用了
lock

object lockObject = new object();
lock(lockObject)
{
    //Acquire some resources and do some operations  
}
//Pulse only the most recently joined thread in waiting list
但我想要的只是只脉冲最后一个线程(等待列表中最近加入的线程),而忽略其他线程(这里不关心死锁、中止或饥饿)。
我可以想到的一个选择是使用消息队列并忽略除处理最后一条消息之外的所有消息。除此之外,我怎么能简单地脉冲最后一个线程而忽略其他线程呢?

有很多方法可以实现这一点。这里有一条路

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

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

当您的代码希望让最后一个等待线程脉冲时,它将从堆栈中弹出最上面的等待句柄,并发出信号

(请注意,此体系结构依赖于调用线程等待WaitHandle。)


有很多方法可以实现这一点。这里有一条路

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

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

当您的代码希望让最后一个等待线程脉冲时,它将从堆栈中弹出最上面的等待句柄,并发出信号

(请注意,此体系结构依赖于调用线程等待WaitHandle。)