pthread是如何工作的?

Mic*_*l K 20 c multithreading pthreads

我在Java和C#的多线程编程方面经验丰富,并开始学习如何在Linux上使用C语言.我在Linux上的编程意义上"长大",所以我理解它的高级内存哲学,流程处理等.

我的问题不是如何进行线程化.我想知道pthread实际上是如何做到的.它是否为您分叉进程并以某种方式处理您的进程间通信?或者它只是管理地址空间?我想要细节......谷歌搜索只产生了"怎么做"的问题,而不是"如何运作".

Kar*_*tan 13

细节可能太复杂而无法真正进入(没有发布glibc源代码的链接),但我可以给你更好的东西来查找:

  1. Pthread使用sys_clone()创建新线程,内核将其视为一个新任务,恰好与其他线程共享许多数据结构.

  2. 为了进行同步,pthread在很大程度上依赖于内核中的futex.


Jav*_*ier 11

在Linux上,两者fork()和ptrhead都使用相同的系统调用clone(),这会创建一个新进程.它们之间的区别仅仅是它们发送给的参数clone(),在创建新线程时,它只是使两个进程使用相同的内存映射.

请记住,在Linux(和其他现代Unix)中,内存映射,堆栈,处理器状态,PID等是进程的正交特征; 所以你可以用一个新的堆栈和进程状态(共享其他所有东西)创建一个新进程,并将其称为一个线程.

  • 线程无法共享另一件事 - "TID"值. (2认同)