MSDN 说:
lock
关键字在块的开始处调用 Enter,而在块的结尾处调用 Exit

违反此准则:

  • lock (this) 问题。

  • lock (typeof (MyType)) 问题。

  • lock(“myLock”) 问题。

private static 对象变量来保护所有实例所共有的数据。


Test

 

class Program
{
private object obj = new object();

public void T()
{
lock (obj)
{
Console.Write(
"Enter");
lock (obj)
{
}
Thread.Sleep(
100);
Console.WriteLine(
" OK!");
}
}
static void Main(string[] args)
{
var p
= new Program();
ThreadStart ts
= new ThreadStart(p.T);

for (int i = 0; i < 10; i++)
{
Thread th
= new Thread(ts);
th.Start();
}
}
}

 

实例会超出控制范围? 第二个 lock 之后, obj 就超出范围了吧,其实不然,第一个lock 依然是阻塞状态。

 

 

无论 obj 字符串,还是 typeof(Program),结果都一样。 不明白MSDN说的是为什么。


相关文章:

  • 2021-10-13
  • 2021-09-14
  • 2022-12-23
  • 2021-10-21
  • 2022-12-23
  • 2021-05-11
猜你喜欢
  • 2021-09-26
  • 2022-03-02
  • 2022-12-23
  • 2022-01-04
  • 2022-12-23
  • 2021-07-09
相关资源
相似解决方案