温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Visual Studio怎么实现死锁

发布时间:2022-01-10 17:59:57 来源:亿速云 阅读:212 作者:iii 栏目:编程语言

这篇文章主要介绍“Visual Studio怎么实现死锁”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Visual Studio怎么实现死锁”文章能帮助大家解决问题。

首先要承认这个标题有那么一丁点标题党,但这又不是完全的标题党。使用“正确”的调试方法的确可以把 VS 给搞死锁了。至于 VS 被死锁了算不算 Bug,这个问题有待于商榷。不想吐槽,先看看怎么用“正确”的方法把 VS 搞死锁。

首先要新建一个控制台项目,完整的复制下列代码:

using System.Threading;  namespace DeadlockVS  {  class Program  {  static object _obj = new object();  static void Main(string[] args)  {  Thread.CurrentThread.Name = "Main Thread";  ThreadStart ts = () =>  {  while (true)  {  lock (_obj)  Thread.Sleep(100);  Thread.Sleep(1);   }  };  for (int i = 0; i <2; i++)  new Thread(ts).Start();  Thread.Sleep(1000);   ts();  }  static int Get()  {  lock (_obj)  return 1;  }   }  }

然后在正确的位置插上正确的断点:

Visual Studio怎么实现死锁

然后在即时窗口里面输入:Get()

Visual Studio怎么实现死锁

现在你的 VS 有99.99%的概率会到达一种“死锁”状态(如果没有被死锁,恭喜你,你现在就可以去买双色球,记得中奖了分大家一点)。IDE 在等待寄主进程返回结果,而寄主进程又需要等待其中的某一个线程释放锁,又因为处在调试状态,寄主进程没办法继续执行下一步代码,也就无法释放锁,最终导致了一个死锁的存在。虽然是死锁,但是 VS 的 UI 并没有被锁死,所以我们现在***能做的事情就是结束调试。

现在实验结束,大家来讨论下这算不算是 VS 的一个 Bug?

正方观点:

会影响正常调试,当然算 Bug

只要导致程序非正常终止的都算 Bug

反方观点:

是你自己调试方法不正确,不能怪 VS

BUG本身是错误,是不按正常的理解执行,不是说死锁就是有BUG

怎么才能解决这一“Bug”?

从程序员自身角度考虑,只有增加自身编码能力和调试能力

从 VS 健壮角度考虑,可以使用沙箱模式,并检测到在执行一定时间还未得出结果后,主动退出。

关于“Visual Studio怎么实现死锁”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI