打破Visual Studio中多个启动项目之间的死锁



我的客户机/服务器解决方案中有多个启动项目。服务器是一个控制台应用程序,客户端是一个WinForms应用程序。服务器/控制台将首先启动,以备不时之需。

现在,由于某些同步客户端代码阻塞了服务器,导致了死锁。线程同步是使用简单的lock语句完成的。

当死锁发生时,两个应用程序当然都会冻结,在VS中点击暂停/中断只会中断服务器应用程序,而不会中断客户端。这里有两个问题:

  • 我如何从多个启动项目中选择哪个项目
  • 如果lock语句陷入死锁,有没有办法找出哪行代码对该对象具有当前锁定

我认为最好的解决方案是在visualstudio的单独实例中调试客户端和服务器,并相应地设置启动项目。

至于第二个问题,我通常在创建和释放锁时设置guid和输出。看看这是否正在发生。如果是,我设置断点并调试,然后查看堆栈以查看调用的来源。您可以将System.Environment.StackTrace输出到日志中以获取此信息,但我从未尝试过。

您可以使用2个Visual Studio。一个启动控制台,一个启动服务器

我会检查一下你是否真的需要一个锁声明。

你想锁定什么?你总是需要专用锁吗?

还是有一些操作可以并行发生,而只有一些是排他性的?

在这种情况下,您可以使用ReaderWriterLockSlim这样可以降低死锁的风险。

最新更新