C#面试题--递归包含锁

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#面试题--递归包含锁相关的知识,希望对你有一定的参考价值。

       做ios也有1年了,C#的东西有些都忘记了,最近几天也打算重温一下,不能学了ios把C#给抛弃了,两者都要抓,一精多专。目前C#只是重温,重点是web这块。今天主要是想起了之前做过的面试题,虽然题比较变态,但也有它的意义。

public void test(int i) 
 { 
    lock(this) 
   { 
      if (i > 10) 
     { 
          i--; 
          test(i); 
      } 
    } 
 }

根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

想必做过C#面试过的都会遇到过这题,我记得我第一次面试做的时候也是做错了,想着递归中包含锁,肯定会死锁。

       当时回去自己动手敲了一下,然并卵,没有死锁。后来又看了大学时的C#教材,又百度了下,发现自己把锁理解错了。我记得当时教材上举的例子是一个银行取款的例子。而在这道题中,一直都在主线程中,并没有开启第二个线程,怎么会发生锁呢。 我记得数据库中也有锁机制,锁主要是解决并发的问题,锁生成的原因主要有两个:同时争夺同一资源A、B同时要C,争夺资源时形成一个环状,A要B,B要C,C要A。

      关于数据库中的锁有时间我可以单独写一博客,这里就不写了。

 

以上是关于C#面试题--递归包含锁的主要内容,如果未能解决你的问题,请参考以下文章

C#刷遍Leetcode面试题系列连载: No.38 - 报数

C#经典面试题——递归运算

C#面试题常见排序算法

Java工程师面试题,二级java刷题软件

java面试题汇总,不断更新中。。。

Day486.尚硅谷之高频重点面试题② -面经