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);
}
}
}
}
答案 0 :(得分:37)
相同的线程两次获取相同的锁。这是有效的,因为.NET支持所谓的递归锁(又名reentrant mutexes)。
答案 1 :(得分:4)
如果一个线程锁定了一个资源,那么该线程就被允许进入,即使它已经拥有了一个锁。这个
也是如此Object obj = new Object();
lock(obj) {
lock(obj) {
foo();
}
}
如果因为同一个帖子而无法通过,会锁定。
答案 2 :(得分:3)
简单 - 您在一个线程中运行。