【问题标题】:Thread Virtual Memory state线程虚拟内存状态
【发布时间】:2012-06-28 04:03:26
【问题描述】:

众所周知,在多个线程的情况下,每个线程都维护其单独的堆栈和寄存器状态。

它们是否也维护单独的虚拟内存状态或者可以共享?

我认为在进程之间共享虚拟内存状态应该没有任何问题。

编辑:

如果线程不保持状态,那么为什么链接上问题 1 的第三个选项 (http://www.geeksforgeeks.org/archives/19913) 不正确?

【问题讨论】:

  • 虚拟内存状态是什么意思?
  • 虚拟内存状态是指虚拟内存中已分配或空闲的地址。

标签: multithreading operating-system virtual-memory


【解决方案1】:

每个进程都有自己的地址空间,也就是进程可以访问的虚拟地址范围。每个进程可以有多个线程。所以,是的,一个进程中的所有线程共享相同的地址空间。请注意,这是变量可以在同一进程的多个线程之间共享而无需任何特殊机制的主要原因。
另一方面,如果不使用进程间通信等特殊机制,则无法跨两个独立进程共享变量,因为每个进程都有自己的地址空间。

【讨论】:

    【解决方案2】:

    正确,两个线程可以共享同一个虚拟内存空间。这本质上是(非常肤浅地)线程与进程相关的定义。

    【讨论】:

      【解决方案3】:

      它们总是共享内存。它可以而且确实会导致很多问题。

      (对于初学者来说,请查看“多线程”标签。)但是多线程可以让您监听许多不同的输入,并且它们可以让您让所有这些 CPU 内核都获得收益。

      【讨论】:

      • 问题.. 和机会 在生产者-消费者队列上的线程之间传递巨大的数据缓冲区只是将它们的地址排队(或类实例,如果 OO)是一件微不足道的事情。源线程一旦发布了地址/引用,就可以立即将另一个分配/malloc/new/depool 分配给同一个 *object 并开始处理它,(除非您使用 C++ 引用而不是指针,因此防止这种简单的重新安置:)。
      猜你喜欢
      • 2013-12-13
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多