我知道线程和处理linux之间没有特别的区别,除了在线程切换期间保持cr3寄存器不变,在进程切换期间保持tlb刷新。
由于groud中的线程共享相同的地址空间,并且pgd(页表)没有改变意味着整个内存布局被共享,因此堆栈空间也被共享,但是根据一般定义线程拥有自己的堆栈,如何这是在linux中实现的。
如果它的类似threadA具有x-y范围的堆栈,那么在第一次页面故障发生并且页面表被更新时,类似地使用范围u-v的threadB将更新相同的页面表。因此,可能会从threadA中弄乱threadB的堆栈。
我只是希望得到清晰的图片,帮助我。这是线程的安全实现吗?。
答案 0 :(得分:1)
这是正确的,线程之间没有操作系统强制保护堆栈内存。一个线程A可以破坏另一个线程B的堆栈(如果线程A知道内存中要查找的位置)。