为什么说Linux不存在真正意义上的线程?

个人理解:
Linux不存在真正意义上的线程,是因为Linux中线程调度是由创建线程的进程进行管理的,这点有别于Windows,Windows的CreateThread确实创建了线程,Windows中由操作系统负责线程的调度(而不是创建线程的进程进行调度)。

### Linux 进程与线程的区别比较 #### 定义差异 在 Linux 中,进程和线程都由 `task_struct` 数据结构来表示。然而,两者之间存在显著的同之处。线程被视作轻量级进程,在创建时会与其父进程共享多个重要数据结构,如打开文件列表、目录信息以及虚拟地址空间等[^1]。 #### 资源共享程度 同一进程内的多条线程能够共享该进程中几乎所有的系统资源,包括但限于虚拟地址空间、文件描述符和信号处理器设置等。相比之下,同进程间会自动共享这些资源;每个独立的进程拥有自己的一套副本[^3]。 #### 实现历史与发展 值得注意的是,在早期版本(例如2.4版之前)的Linux内核中,线程实际上是以传统意义上的进程形式存在的——即并没有真正意义上区分二者。直到后来(比如2.6版之后),才引入了专门针对线程的支持机制,从而使得线程成为了一种更加高效的任务调度单位[^2]。 ```c // 创建新进程的例子 (fork()) pid_t pid; pid = fork(); if (pid < 0) { perror("Fork failed"); } else if (pid == 0) { /* 子进程 */ printf("This is child process\n"); } else { /* 父进程 */ wait(NULL); //等待子进程结束 } // 创建新线程的例子 (pthread_create()) #include <pthread.h> void *thread_function(void *arg){ pthread_exit(0); } int main(){ pthread_t thread_id; int ret = pthread_create(&thread_id, NULL, thread_function, NULL); if(ret != 0){ fprintf(stderr,"Thread creation failed.\n"); } pthread_join(thread_id,NULL); return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值