同线程锁语句递归不会死锁的方法是什么

  介绍

这篇文章主要介绍同线程锁语句递归不会死锁的方法是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

同线程锁语句递归不会死锁
答案如下:
根据线程安全的相关知识,分析以下代码,当调用测试方法时i> 10时是否会引起死锁?并简要说明理由。

 <代码>公共空白测试(int i)
  {
  ,,锁(这)
  ,{
  ,,,如果我比;10)
  ,,{
  ,,,,,我,;
  ,,,,,测试(我);
  ,,,}
  ,,}
  } 

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个对象,那么死锁会发生)
当我看到这道题时,我心里只有两个答案,1,会发生死锁,2,不会。^ _ ^说了当没说。我觉得会发生死锁的理由是:同一线程只能进入锁语句一次,如果这个线程没有退出锁语句就不能再次进入锁语句。而不会发生死锁的理由是,同一线程可以多次进入到锁语句中。
我将这段代码拷入VS中运行,发现没有进入死锁,于是想找个权威的理由来解释它,终于在《CLR通过c#》第二版(中文版,清华大学出版社出版)的第530页中第7行找到了这样的描述:“同样需要引起注意的是线程可以递归拥有同步块”。即同一线程可以递归调用锁语句。
以上只讨论了单线程的情况,下面的代码给出的两个线程的情况:

 <代码>使用系统;
  使用System.Threading;
  
  名称空间LockDemo
  {
  ,,类项目
  ,,{
  ,,,,静态void Main (string [] args)
  ,,,,{
  ,,,,,,程序p=新项目();
  ,,,,,,MyObj obj=new MyObj ();
  ,,,,,//第,一个线程
  ,,,,,,线程thread1=新线程(僵化);
  ,,,,,thread1。Name=皌hread1";
  ,,,,,//第,一个线程
  ,,,,,,线程thread2=新线程(僵化);
  ,,,,,thread2。Name=皌hread2";
  ,,,,,,//启动线程
  ,,,,,,thread1.Start (obj);
  ,,,,,,thread2.Start (obj);
  ,,,,,,Console.Read ();
  ,,,,}
  
  ,,,,公共空白测试(对象obj)
  ,,,,{
  ,,,,,,锁(这)
  ,,,,,,{
  ,,,,,,,,如果(((MyObj) obj)。价值比;10)
  ,,,,,,,,{
  ,,,,,,,,,,((MyObj) obj) value——;
  ,,,,,,,,,Console.Write (Thread.CurrentThread。名称+“:”);
  ,,,,,,,,,,Console.WriteLine (((MyObj) obj) value);
  ,,,,,,,,,,thread . sleep (10);
  ,,,,,,,,,,测试(obj);
  ,,,,,,,,}
  ,,,,,,,其他的,
  ,,,,,,,,{
  ,,,,,,,,,,Console.WriteLine (Thread.CurrentThread.Name);
  ,,,,,,,,}
  ,,,,,,}
  ,,,,}
  ,,}
  ,,///& lt; summary>
  ,,///将一个值类型封装在一个类中,以便多个线程调用方便
  ,,///& lt;/summary>
  ,公开课MyObj
  ,,{
  ,,,,公共int值;
  
  ,,,,公共MyObj ()
  ,,,,{
  ,,,,,,//将初始值赋为20
  ,,,,,,价值=https://www.yisu.com/zixun/20;
  }
  }
  } 

下面是运行结果:
同线程锁语句递归不会死锁的方法是什么”> <br/>由于thread1先进入锁语句,所以锁一直由thread1占有,递归调用直到不满足条件为止,thread1释放锁后,thread2进入锁语句时,发现当前已经不满足递归条件了,即:我& lt;十了,所以直接退出。<br/>让我觉得奇怪的是网上给出的答案,即括号中的文字说明,明明代码中是对这对象加的锁,与传递的参数何关?找个int是按值传递的理由解释不会发生死锁让我觉得很奇怪。<br/>注:如有不明白锁的背后技术原理的,请参考《CLR通过c#》一书。</p> <p>参考文献:《CLR通过c#》第二版,530页第,清华大学出版社<br/> <img src=

以上是同线程锁语句递归不会死锁的方法是什么的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

同线程锁语句递归不会死锁的方法是什么