1

A と B の 2 つの機能があり、それらが同時に実行されないようにしたいと考えています。ロックまたはミューテックスまたはインターロックを使用する必要がありますか?

これは私が試したものです:

class C
{
    object obj = new Object();

    void A()
    {
        lock(obj)
        {
            // do stuff
        }
    }

    void B()
    {
        lock(obj)
        {
            // do stuff
        }
    }
}

AにBがロックされているかどうかを確認して返してもらいたい場合、どうすればよいですか?

より良い解決策はありますか?

4

1 に答える 1

3

あなたが持っているコードは、2つの異なるスレッドがAB(の同じインスタンスでC)を同時に呼び出すことをすでに防止しています-ただし、A呼び出しB(またはB呼び出しA)が機能することに注意してください。を取得できるまで、コールはブロックされlockます。

ブロックせずに を取得できるかどうかを確認したい場合は、タイムアウトをゼロに指定することで確認できます。lockTryEnter

bool lockTaken = false;
try {
    Monitor.TryEnter(obj, 0, ref lockTaken);
    if(lockTaken) {
        // have lock etc
    }
} finally {
    if(lockTaken) Monitor.Exit(obj);
}
于 2013-05-23T09:06:43.510 に答える