我的客户端/服务器解决方案中有多个启动项目。服务器是控制台应用程序,客户端是WinForms应用程序。万一重要,服务器/控制台将首先启动。
现在,由于某些阻止服务器的同步客户端代码而导致死锁。线程同步是使用简单的lock
语句完成的。
当发生死锁时,两个应用程序当然都会冻结,并且在VS中遇到暂停/中断只会中断服务器应用程序,而不会中断客户端。这里有两个问题:
lock
语句陷入死锁,是否有办法找出哪一行代码对该对象具有当前锁?我认为最好的解决方案是在单独的Visual Studio实例中调试客户端和服务器,并相应地设置启动项目。
至于第二个问题,我通常会在创建和释放锁时设置一个GUID并输出。看看是否正在发生。如果是这样,我将设置断点并进行调试,然后查看堆栈以查看调用来自何处。您可能可以将System.Environment.StackTrace输出到日志中以获取此信息,但是我曾经尝试过。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句