• Lock中使用递归是否会死锁


      以下代码,在Lock里面使用递归操作,是否会造成死锁问题??该问题也是很多coder在面试时经常会碰到的问题,在此做下笔记,不懂的coder也可以顺便了解下,确保面试不再因此碰壁。

     1 public class A
     2     {
     3         private object obj = new object();
     4         public void Test(int i)
     5         {
     6             lock (obj)
     7             {
     8                 if (i > 10)
     9                 {
    10                     i--;
    11                     Test(i);
    12                 }
    13                 else
    14                 {
    15                     Console.WriteLine(i);
    16                 }
    17             }
    18         }
    19     }
    20 
    21     class Program
    22     {
    23         static void Main(string[] args)
    24         {
    25             A a = new A();
    26             a.Test(15);
    27             Console.ReadKey();
    28         }
    29     }
    View Code

      答案:否。

      原因是什么呢?我们先来看看Lock的定义:

      lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放

      由定义可知,Lock的本质是针对于多线程的,上面代码中这个锁属于自己线程所有,在属于自己的线程中无须等待对象被释放即可进入临界区,进行任意操作。

  • 相关阅读:
    用户(三)
    首页和token验证(二)
    项目初始化和登录退出(一)
    VSCode设置vue/react模板
    Git操作
    C#可视化程序设计第三章(1,2)
    C#可视化程序设计第二章(3,4)
    SQL数据库第五章
    C#可视化程序设计第一章
    SQL数据库第四章
  • 原文地址:https://www.cnblogs.com/Jonish/p/3235206.html
Copyright © 2020-2023  润新知