C 当我调试死锁情况消失时。。。那我到底是怎么发现错误的呢?
对不起,我快发疯了!当我在C代码中打印消息时,死锁不会发生。但当我不打印它们时,我有时会看到死锁。程序无法正常工作,将永远等待 我该如何找出问题所在 学习曲线较小的其他方法有哪些C 当我调试死锁情况消失时。。。那我到底是怎么发现错误的呢?,c,multithreading,debugging,deadlock,C,Multithreading,Debugging,Deadlock,对不起,我快发疯了!当我在C代码中打印消息时,死锁不会发生。但当我不打印它们时,我有时会看到死锁。程序无法正常工作,将永远等待 我该如何找出问题所在 学习曲线较小的其他方法有哪些 如果你想看密码,告诉我。由于它相当复杂,我没有把它放在这里。埃兰的评论包含了一些好的想法。您可以使用的另一种可能是互补的方法是,对每个进程或每个线程的单独文件进行调试输出,以便打印不会强加任何顺序。仍然存在这样一种可能性,即花在写作上的时间可能会使时间错开,足以防止死锁,但这并不是必然的。有时,每个进程单独的日志比交错
如果你想看密码,告诉我。由于它相当复杂,我没有把它放在这里。埃兰的评论包含了一些好的想法。您可以使用的另一种可能是互补的方法是,对每个进程或每个线程的单独文件进行调试输出,以便打印不会强加任何顺序。仍然存在这样一种可能性,即花在写作上的时间可能会使时间错开,足以防止死锁,但这并不是必然的。有时,每个进程单独的日志比交错的日志更容易阅读。这并不少见——打印是同步的(在某种程度上),并在代码中引入顺序。这足以隐藏导致死锁的数据竞争。你不能在代码死锁后调试代码,看看谁被锁定了,然后反向工作吗?“你不能在代码死锁后调试代码”我怎么做?如果你不使用调试器运行它,在代码挂起后附加一个调试器,并检查挂起线程的堆栈。不能再说了,因为我不知道你的开发环境是什么。什么是“一”?调试器。您的开发环境是什么?VC、GCC等。