pro*_*ach 11 c# multithreading
谁能解释为什么这样有效:
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);
}
Run Code Online (Sandbox Code Playgroud)
但如果我将锁定对象的对象类型更改为String(如下所示),则会失败:
String ready_lock = "Hello";
String thread_lock = "Hello";
Run Code Online (Sandbox Code Playgroud)
一段时间以来我一直困扰着我.谢谢 :)
Jon*_*eet 14
当你将它们都设置为"Hello"时,由于字符串实习,你最终会得到两个具有相同值的变量.这就像做
Object ready_lock = new Object();
Object thread_lock = ready_lock;
Run Code Online (Sandbox Code Playgroud)
所以基本上就是"如果你有两个锁涉及它们,它们可以被不同的线程独立锁定,但只有一个锁,只有一个线程可以一次获取锁."
它是一种优化,类似的const字符串被视为同一个对象,只需更改你的代码:
String ready_lock = "1)Hello";
String thread_lock = "2)Hello";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |