【问题标题】:How to judge if two threads have accessed the same region of memory?如何判断两个线程是否访问了同一个内存区域?
【发布时间】:2017-04-23 08:46:42
【问题描述】:

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

【问题讨论】:

  • 由于这是多线程应用程序中的常见行为,我看不到这种工具的用处,因此我怀疑它是否存在。

标签: c linux multithreading


【解决方案1】:

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

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

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

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

【讨论】:

  • 非常感谢。这给了我解决和定义问题的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
相关资源
最近更新 更多