程序的线程模型应该能在一张 A4 纸上画出来,有哪些线程,干什么活,各路消息来了经过哪些处理步骤,涉及哪些线程,会访问哪些共享数据,等等。
这样就算最初的作者离开团队,后面的维护者也不会轻易破坏这个设计。
要知道,一个看似无害的局部代码修改,有可能造成 data race,如果混过了code review,那么就埋雷了,轻则程序崩溃,重则破坏数据。理解程序的线程设计,才能最大限度地防止这一情况的出现。
最后,动态和静态的分析工具也可以派上用场,例如 Valgrind、ThreadSanitizer。