线程是否可以访问同一进程的其他线程堆栈?

时间:2016-10-07 15:51:08

标签: multithreading memory-management process operating-system

我知道进程的线程共享除堆栈之外的地址空间(所有段)。每个线程都有自己的堆栈。我还读到,在相同的地址空间中,线程可以访问属于其他线程(herehere的堆栈的内存位置。

如果上面的陈述是正确的,那我就提出这个问题:当OS从一个线程看到这样的地址时会发生什么?如果线程在其他堆栈中写入并破坏它们会怎么样?为什么操作系统不会产生某种权限被拒绝错误?

如果这个问题的答案取决于操作系统,请考虑使用Linux。

1 个答案:

答案 0 :(得分:0)

正如您所述,线程共享相同的地址空间。因此,每个线程对地址空间的访问权限与任何其他线程相同。

  

操作系统从线程中看到这样的地址?

我无法告诉你在这里问的是什么。

  

如果线程在其他堆栈中写入并损坏它们会怎么样?

这是完全可能的,结果是不可预测的。这就像一场竞争条件。

  

为什么操作系统不会产生某种权限被拒绝错误?

内存访问由处理器模式(例如,用户,内核以及某些系统的其他模式)控制。通常,模式级保护旨在防止用户访问逻辑地址空间的共享系统范围。通过具有不同的用户地址空间范围来保护进程相互保护。

通常,您希望线程能够在同一地址空间内进行读写。否则,您也可以使用单独的流程。

堆栈只是一个读/写成员块。堆栈没有什么神圣的东西。任何内存块都可以是堆栈,只需将其用作堆栈即可。