1

从没有办法以原子方式增加计数器并锁定互斥锁(或 ty 来获取它)的假设开始,是否有任何多线程库允许读取互斥锁上的等待线程数?

4

1 回答 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 回答