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 に答える