同一进程内的线程共享的资源:

  • 代码段:存放程序的可执行指令,所有线程共享相同的代码段,因此任何线程都可以执行程序中的函数。

  • 数据段:包含全局变量和静态变量,这些变量在程序运行期间只有一个实例,所有线程都可以访问和修改它们。

  • :用于动态内存分配,线程可以在堆上分配和释放内存,因此堆上的数据对所有线程可见。

  • 打开的文件:如果程序在运行过程中打开了文件,文件描述符等信息在进程地址空间中保存,所有线程都可以访问这些打开的文件。

每个线程的私有资源:

  • :每个线程都有自己的栈空间,用于存储函数的局部变量、返回地址等。

  • 寄存器:线程在执行过程中使用的寄存器集是独立的,包括程序计数器(PC)等。

  • 线程局部存储(Thread Local Storage):存放线程私有的全局变量,即使变量名相同,不同线程访问的也是各自独立的副本。

注意:虽然栈是线程私有的,但由于线程间没有严格的内存隔离机制,一个线程可以通过指针访问和修改另一个线程的栈数据。