gpt4 book ai didi

linux - 线程在内存中的什么位置实现?

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:14 25 4
gpt4 key购买 nike

我们知道线程有自己的堆栈,它是在进程内实现的。但我的问题是,当 thread 在他自己的堆栈中实现时,它与进程或任何其他函数使用的堆栈相同吗?

还有一个疑问,线程共享它的全局变量、文件描述符、信号处理程序等。但是它是如何在所有线程执行的同一地址内共享所有这些参数的呢?

简短的解释将不胜感激。

最佳答案

when thread is implemented in his own stack that time it is the same stack which used by process or any other?

无法完全解析此内容,但我明白了我认为的要点。

在大多数情况下,在 Linux 下的多线程应用程序中,所有线程共享相同的地址空间。每个线程如果在单独的处理器上运行,则可能具有本地缓存​​内存,但总体地址空间由所有线程共享。甚至每个线程的堆栈空间也被所有线程共享——只是每个线程获得不同的连续内存区域。

But how it's share all these parameters within same address?

全局变量、文件描述符等也是如此。它们都是共享的。

Linux 下运行的大多数线程实现都使用clone(2) 系统调用来创建新的线程进程。引用clone man page :

clone() creates a new process, in a manner similar to fork(2). It is actually a library function layered on top of the underlying clone() system call, hereinafter referred to as sys_clone. A description of sys_clone is given toward the end of this page.

Unlike fork(2), these calls allow the child process to share parts of its execution context with the calling process, such as the memory space, the table of file descriptors, and the table of signal handlers.

您可以在 Linux 下使用 ps -eLf 查看克隆的进程。

关于linux - 线程在内存中的什么位置实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17219932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com