gpt4 book ai didi

c++ - 如何检测循环调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:47 25 4
gpt4 key购买 nike

我一直在寻找死锁的原因以及避免和检测死锁的策略/工具。

死锁的另一个潜在原因是阻塞函数以循环方式调用其他阻塞函数,因此最终调用永远不会返回。

有时这很难发现,特别是在非常大的项目中。

那么,是否有任何工具/库/技术可以自动检测程序中的循环调用?

编辑:我主要使用 C 和 C++ 编写代码,因此,如果可能,请提供有关适用于这些语言的主题的任何信息。

不过,似乎这个话题在 SO 中几乎没有涉及,所以其他语言的答案也可以。 尽管如果有人认为相关,也许这些值得单独讨论

谢谢。

最佳答案

尝试获取相同不可重入锁的循环(或递归)调用是最容易调试的阻塞场景之一:锁定是确定性的,可以轻松检查。当应用程序锁定时,启动调试器并查看堆栈跟踪以了解持有哪些锁及其原因。

至于锁定问题的一般解决方案...您可以查看一些提供互斥量排序的库,并检测您何时试图无序地锁定互斥量。这种类型的解决方案可能很难正确实现,但一旦到位,它可以确保您不会进入死锁状态,因为它会强制所有进程以相同的顺序获取锁(即,如果进程 A 持有锁 La,它会尝试获取顺序正确的锁 Lb,然后它可以成功或锁定,但是持有锁 Lb 的进程不能尝试锁定 La,因为不满足顺序约束。

关于c++ - 如何检测循环调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com