每个线程都有自己的堆栈吗?

man*_*m-n 21 c c++ stack multithreading pthreads

当我从进程创建多个线程时,每个线程是否都有自己的堆栈,或者它们是否共享其父进程的堆栈.线程进行系统调用时会发生什么?线程是否也像进程一样维护自己的内核堆栈?

Joo*_*wan 12

是的线程有自己的堆栈和自己的内核堆栈(例如linux).

当一个线程进行系统调用时,你陷入内核模式(从用户模式),你将参数传递给内核,检查参数,内核做它需要做的事情(在内核堆栈中),返回返回到线程的最终值,然后返回用户模式.

  • 内核堆栈只是添加到预先存在的模型上的安全预防措施.多个堆栈是多线程的先决条件.内核本质上提供了用户空间中发生的任何内容的并行版本,以防止敏感数据泄漏. (2认同)