gpt4 book ai didi

c++ - 如何检测内存访问冲突和/或内存竞争条件?

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

我有一个目标平台报告何时读取或写入内存以及何时获取/释放锁(例如考虑互斥锁)。它报告程序计数器、数据地址和读/写标志。我正在编写一个程序,在接收报告的单独主机上使用此信息,因此它不会干扰目标。目标已经报告了这些数据,所以我根本没有更改目标代码。

是否有任何引用资料或已经可用的算法可以进行此类检测?例如,当多个线程尝试写入全局变量而不首先保护它时,检测竞争条件的某种方法。

我目前正在酝酿我自己的,但我说服自己肯定有一些代码已经可以做到这一点。或者至少有一些经过验证的算法可以解决这个问题。

注意 这不是为了检测内存泄漏。

注意实现语言为C++

我试图让我编写的检测代码与平台无关,所以我使用 STL 和标准 C++ 以及 boost、poco、loki 等库。

任何线索都会有所帮助

谢谢。

最佳答案

说服您放弃这件事可能为时已晚,但这是行不通的。线程竞争是由线程之间微妙的计时问题引起的。您永远无法通过日志记录来诊断与时间相关的问题。 Heisenbergian,仅记录会改变线程的时间。特别是你正在考虑的那种。臭名昭著的是,有很多软件随日志记录保持打开状态,因为它会在关闭时急剧下降。

清除线程错误很困难。一种有效的工具是有意在代码中注入(inject)随机延迟。 Microsoft CHESS 就是一个例子,它也适用于 native 代码。

关于c++ - 如何检测内存访问冲突和/或内存竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3503934/

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