Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当我调试死锁情况消失时。。。那我到底是怎么发现错误的呢?_C_Multithreading_Debugging_Deadlock - Fatal编程技术网

C 当我调试死锁情况消失时。。。那我到底是怎么发现错误的呢?

C 当我调试死锁情况消失时。。。那我到底是怎么发现错误的呢?,c,multithreading,debugging,deadlock,C,Multithreading,Debugging,Deadlock,对不起,我快发疯了!当我在C代码中打印消息时,死锁不会发生。但当我不打印它们时,我有时会看到死锁。程序无法正常工作,将永远等待 我该如何找出问题所在 学习曲线较小的其他方法有哪些 如果你想看密码,告诉我。由于它相当复杂,我没有把它放在这里。埃兰的评论包含了一些好的想法。您可以使用的另一种可能是互补的方法是,对每个进程或每个线程的单独文件进行调试输出,以便打印不会强加任何顺序。仍然存在这样一种可能性,即花在写作上的时间可能会使时间错开,足以防止死锁,但这并不是必然的。有时,每个进程单独的日志比交错

对不起,我快发疯了!当我在C代码中打印消息时,死锁不会发生。但当我不打印它们时,我有时会看到死锁。程序无法正常工作,将永远等待

我该如何找出问题所在

学习曲线较小的其他方法有哪些


如果你想看密码,告诉我。由于它相当复杂,我没有把它放在这里。

埃兰的评论包含了一些好的想法。您可以使用的另一种可能是互补的方法是,对每个进程或每个线程的单独文件进行调试输出,以便打印不会强加任何顺序。仍然存在这样一种可能性,即花在写作上的时间可能会使时间错开,足以防止死锁,但这并不是必然的。有时,每个进程单独的日志比交错的日志更容易阅读。

这并不少见——打印是同步的(在某种程度上),并在代码中引入顺序。这足以隐藏导致死锁的数据竞争。你不能在代码死锁后调试代码,看看谁被锁定了,然后反向工作吗?“你不能在代码死锁后调试代码”我怎么做?如果你不使用调试器运行它,在代码挂起后附加一个调试器,并检查挂起线程的堆栈。不能再说了,因为我不知道你的开发环境是什么。什么是“一”?调试器。您的开发环境是什么?VC、GCC等。