Linux kernel 关于linux中线程的困惑

Linux kernel 关于linux中线程的困惑,linux-kernel,Linux Kernel,我知道线程和处理linux之间没有什么特别的区别,除了在线程切换期间保持cr3寄存器不变,在进程切换期间保持tlb刷新 由于组中的线程共享相同的地址空间,而pgd(页表)没有改变,这意味着整个内存布局都是共享的,因此堆栈空间也会共享,但根据一般定义,线程拥有自己的堆栈,这在linux中是如何实现的 如果其相似的threadA具有x-y范围的堆栈,则在第一个页面发生错误并更新页面表,类似地,使用范围u-v的threadB将更新相同的页面表。因此,可能会将threadA的threadB堆栈弄乱 我只

我知道线程和处理linux之间没有什么特别的区别,除了在线程切换期间保持cr3寄存器不变,在进程切换期间保持tlb刷新

由于组中的线程共享相同的地址空间,而pgd(页表)没有改变,这意味着整个内存布局都是共享的,因此堆栈空间也会共享,但根据一般定义,线程拥有自己的堆栈,这在linux中是如何实现的

如果其相似的threadA具有x-y范围的堆栈,则在第一个页面发生错误并更新页面表,类似地,使用范围u-v的threadB将更新相同的页面表。因此,可能会将threadA的threadB堆栈弄乱


我只是想弄清楚这一点,帮我解决一下。这是线程的安全实现吗?

没错,线程之间的堆栈内存没有操作系统强制保护。一个线程A可能损坏另一个线程B的堆栈(如果线程A知道在内存中查找的位置)