如何判断两个线程是否访问过相同的内存区域?

时间:2017-04-23 08:46:43

标签: c linux multithreading

想象一下,我们有两个相同进程的线程,我想知道两个线程是否相互通信。 换句话说,如果两个线程访问(读/写)相同的内存区域,则它们之间存在相关性。 更具体地说,输入是两个不同的线程id,输出是一个布尔值,表示两个线程是否访问过相同的内存区域。是否有任何工具或方法可以跟踪两个线程的内存访问(读/写)操作?

1 个答案:

答案 0 :(得分:0)

找出两个线程是否正在访问相同的内存将非常困难。它可能涉及使用虚拟化,因此您可以在其中一个线程访问内存时调用您的代码,以便查看该内存是否也被其他线程访问。这反过来会使线程运行得如此之慢,以至于在每个线程覆盖其工作集之前可能需要等待很长时间。

幸运的是,你不需要做任何这些事情,因为我可以告诉你如果你尝试了会发现什么:

在同一个进程中,几乎可以保证任何两个线程都将访问某些相同的内存。这不一定是因为他们试图相互通信,但由于各种内务管理原因,例如跟踪哪个线程是最新的,调用需要在每个线程的基础上保持某些状态的常用功能,等

先生,您手上有x-y问题。 http://xyproblem.info/