线程和线程的等待分离

本文详细介绍了线程和进程的区别,强调了线程在资源调度和并发执行上的优势。在Linux下,线程是轻量级进程,其PID与线程ID的概念有所区别。多线程可以提高程序效率,但也会带来数据不一致和线程安全问题。文章还讨论了线程创建和等待的POSIX标准,以及线程的分离与资源回收的重要性。
摘要由CSDN通过智能技术生成

线程和进程的区别

在操作系统中,进程是提供程序运行资源的最小单位,而线程是调度这些资源的最小单位,也称作该进程的执行流.
在一个进程运行时,它的地址空间和另一个进程是独立的.也就是说他们的资源是独有的,一个进程在正常情况下是看不见另一个进程的资源的(除了进程通信)

而在一个进程内部的多个线程,他们是运行在一个地址空间范围内的,所以它们可以看见和共享 进程 提供的资源

所以操作系统创作一个进程,至少给它分配一个线程(执行流)

Linux下的线程

在Linux下并没有提供关于线程数据结构,但我们知道操作系统给一个进程分配的PCB是task_struct的结构体;

但其实Linux系统下的进程是一种轻量级进程(LWP), 它的task_struct结构体关键字段如下

{
 pid_t pid;
 pid_t tgid;

 struct task_struct *group_leader;

 struct list_ehad thread_group;

}

其中 pid其实是执行流的 ID号,也就是线程的ID号
而 tgid 是这一组的执行流共有的ID号,实际反应的是个进程的ID号

我们调用 系统调用 getpid();时返回的其实是tgid(执行流共有的ID)

当一个进程中只有一个执行流时, 显然pid的值就等于 tgid

就会给我们一种 调用getpid()就是task_struct 中的 pid 错觉

我们可以使用 gettid() 获得线程的 pid;

多线程和进程的优缺点

优点

1.多线程可以实现进程的并发执行
假设

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值