任何人都可以解释为什么这可行:
Object ready_lock = new Object();
Object thread_lock = new Object();
public static bool able_to_get_lock = false;
public void GetThreadLock()
{
if (Monitor.TryEnter(thread_lock,2))
{
able_to_get_lock = true;
}
}
[TestMethod]
public void ThreadingModelTest()
{
Monitor.Enter(ready_lock);
Thread t1 = new Thread(new ThreadStart(GetThreadLock));
t1.Start();
Thread.Sleep(400);
Assert.IsTrue(able_to_get_lock);
}
但是如果我将锁定对象的对象类型更改为字符串(如下所示),它将失败:
String ready_lock = "Hello";
String thread_lock = "Hello";
现在已经让我感到困惑了。谢谢 :)
最佳答案
当将它们都设置为“Hello”时,由于字符串插入,最终两个变量都具有相同的值。就像在做
Object ready_lock = new Object();
Object thread_lock = ready_lock;
因此,基本上是一种情况:“如果涉及到两个锁,它们可以被不同的线程独立地锁定,但是只有一个锁,一次只能有一个线程获得该锁。”
关于C#线程行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3449451/