从没有办法以原子方式增加计数器并锁定互斥锁(或 ty 来获取它)的假设开始,是否有任何多线程库允许读取互斥锁上的等待线程数?
问问题
1009 次
1 回答
0
我不知道您使用哪种编程语言编写代码,但在 C# 中,您可以尝试在不阻塞的情况下对对象进行排他锁,因此您的 Mutex 实现将如下所示:
class MyMutex
{
public int LockedThreadsCount
{
get { lock (countLock) { return waitingThreads; } }
}
public void WaitOne()
{
if (!Monitor.TryEnter(mainLock))
{
lock (countLock) { waitingThreads++; }
Monitor.Enter(mainLock);
lock (countLock) { waitingThreads--; }
}
}
public void Release()
{
Monitor.Exit(mainLock);
}
private int waitingThreads = 0;
private object countLock = new object();
private object mainLock = new object();
}
于 2012-06-09T22:05:07.277 回答