理解和分析多线程代码的最佳方式是什么?

What is the best way to understand and analyze a multithreading code?

我不是在寻找编程技巧。我的问题是关于理解第三方开发的代码的最佳方式是什么。

我有一个特定语言的应用程序代码(可能是 C/C++、Java 等)。此代码使用多个线程来控制不同的进程。应用程序生成一个日志,显示每个线程对相关函数的所有调用。

我必须分析这段代码以了解其操作并能够改进算法。我很少使用线程,所以我不知道哪种方法最方便地开始分析并跟踪每个线程的执行。

你能给我推荐什么吗?

如果您能够联系到任何代码的原始开发人员,与他们交谈(通过语音或电子邮件)并要求他们描述他们希望事情如何工作总是比仅仅试图逆转更可取 -通过查看代码来设计他们的意图。如果您不能直接联系开发人员,那么也许有一个特定于库的开发人员论坛或其他在线资源,您可以在其中与有经验的人讨论库的结构 using/debugging。

如果那不是一个选项(或者如果你已经这样做了但仍然觉得你对事情的理解不够好),那么我经常会发现这种分析(通过分析工具,或者只是暂时把printf() [或类似] 跟踪调用代码库的不同位置并查看何时打印的内容)是找出代码的哪些部分在程序执行的哪些阶段实际被使用的好方法。这将帮助您确认(或反驳)您关于代码库如何工作的理论。知道每个线程在何时何地产生,它的入口函数在哪里,以及 where/when 它被它的父线程再次加入是特别有用的。

最后,开始查看每个线程检查 and/or 修改的各种数据(例如对象和成员变量),以及如何访问这些数据 synchronized/serialized。假设代码没有错误,代码库的关键部分是线程间通信发生位置的良好指标。