CodeSOD:锁死即亡 笔记

CodeSOD:锁死即亡

提供的 C++ 代码片段展示了一个用于捕获 Deadlock 异常的异常处理程序。捕获该异常后,代码尝试执行 retry。然而,retry 并非标准 C++ 关键字,很可能是一个宏。作者怀疑该宏是通过 goto 语句实现的。核心问题在于假设 retry 能够解决死锁。死锁发生在两个或多个线程被无限期阻塞,每个线程都在等待另一个线程持有的资源时。要使 retry 有效,它必须释放当前被死锁线程持有的资源。根据代码作者 Kevin 的说法,retry 宏并不释放任何资源,它只是简单地跳转回 catch 块的开头。这意味着线程仍然被困在死锁状态中。Kevin 指出,该系统此前已遭受大量死锁困扰。为此聘请了一位顾问,通过重新排序资源访问顺序并识别与互斥锁相关的问题来解决这些问题。然而,顾问实现的 retry 似乎无意中引入了更多的死锁。Kevin 幽默地推测,该顾问可能有意在其代码中添加了额外的死锁。