このコードがデッドロックしないのはなぜですか?

.net c# multithreading
このコードがデッドロックしないのはなぜですか?

Logメソッドはブロックすべきではありませんか?

namespace Sandbox {
class Program {
    static void Main(string[] args) {
        var log = new Logger();
        lock (log) {
            log.Log("Hello World!");
        }
    }
}

public class Logger {
    public void Log(string message) {
        lock (this) {
            Console.WriteLine(message);
        }
    }
}

}

  12  1


ベストアンサー

_同じスレッド_が同じロックを2回取得しています。 これが機能するのは
.NET supports so-called recursive locks (aka
reentrant mutex)。

37


リソースがスレッドによってロックされている場合、そのスレッドが既にロックを所有していても、そのスレッドは許可されます。 これも同じです

Object obj = new Object();

lock(obj) {
    lock(obj) {
        foo();
    }
}

同じスレッドであるために通過できなかった場合、ロックアウトします。

4


シンプル-単一のスレッドで実行しています。

3


タイトルとURLをコピーしました