问题描述
|
我知道线程和处理linux之间没有特殊区别,除了在线程切换过程中保持cr3寄存器未触动和在进程切换过程中保持tlb flush不变。
由于groud中的线程共享相同的地址空间,并且不更改pgd(页表),这意味着共享整个内存布局,因此也共享了堆栈空间,但是按照通用定义线程拥有自己的堆栈,该如何实现在Linux中。
如果它的类似线程A具有x-y范围内的堆栈,则在第一个页面错误发生并更新页表时,类似地,使用范围u-v的线程B将更新同一页表。因此有可能从线程A弄乱线程B的堆栈。
我只是想清楚地了解一下,帮帮我,这是线程的安全实现吗?
解决方法
没错,线程之间没有操作系统强制的堆栈内存保护。一个线程A可以破坏另一个线程B的堆栈(如果线程A知道在内存中查找的位置)。