多线程编程(一)——线程的创建、等待、分离、结合与终止

本文介绍了Linux下多线程的概念、引入原因、线程的共享与私有资源、执行模型,详细讲解了线程的创建、终止、等待、分离与结合,以及pthread函数的使用,帮助理解Linux下线程的实现与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是线程?

Linux kernel中是不存在线程的,或者说没有真正意义上的线程,Linux下的线程都是用进程来模拟的,线程的实现就是多个共享数据信息的进程,我们称之为“轻量级进程”。

多线程的引入

多线程是指操作系统在单个进程内支持多个并发执行路径的能力,线程属于进程的的多个执行流。linux多线程设计包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。

Linux系统下的多线程遵循POSIX线程接口,称为POSIX thread 或者 pthread。在linux下线程函数位于libpthread共享库中,需要加上头文件pthread.h,连接时需要使用-lpthread。

Linux下pthread的实现是通过系统调用clone ( ) 来实现的,clone是linux所特有的系统调用,它的使用方式类似于fork。

线程的共享与私有

由于同一个进程的多个线程共享同一地址空间,因此Text Segment、Data Segment 都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问,除此之外,各线程共享以下进程资源和环境:

(1)文件描述符(fd)

(2)每种信号的处理方式(SIG_IGT、SIG_DEL或者自定义的信号函数)

(3)当前的工作目录

(4)用户id和组id

但是,有一些资源是各个线程私有一份的:

(1)线程id

(2)上下文,包括各种寄存器的值、程序计数器和栈指针

(3)栈空间

(4)errno变量

(5)信号屏蔽字

(6)调度优先级

线程由内核自动调度,并且内核通过一个整数ID来识别线程。同基于I/O多路复用一样,多个线程运行在单一进程的上下文中,因此共享这个进程虚拟地址空间的整个内容,包括代码、数据、堆、共享库和打开的文件。

线程执行模型

多线程的执行模型在某些方面和多进程是相似的,如下图所示:

每个进程开始生命周期都是单一线程,整个线程称之为主线程(main thread)。在某一时刻,主线程创建一个对等线程(peer thread),从这个时间点开始,两个线程就并发地执行。最后,因为主线程执行一个慢速系统调用(read 或 sleep)等,控制就会通过上下文切换传递到对等线程,对等线程会执行一段时间,然后传递回主线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值