Linux——线程(2)

本文详细介绍了Linux中线程的创建、控制机制,包括线程终止、回收、等待,以及线程库pthread的工作原理。还探讨了线程局部存储的概念,以及高级编程语言中线程库的实现方式。

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

在上一篇博客中我介绍了Linux中的线程是什么样的,就如同进程可以通过
fork创建,可以被终止,可以退出一样,线程也可以被我们用户控制,这
篇博客我会介绍线程的控制,并且基于线程的控制所产生的一些问题进行
解决这些问题

线程的控制

1. 线程的创建

我们要学会对线程的控制,首先得创建出来一个线程,所以我们会认识一个接口:
在这里插入图片描述
这就是我们创建线程的一个接口,可以看出它是三号手册中的,并不是系统调用,这一点之后会从多方面来解释它。
它的第一个参数就是线程的id,类型是ptread_t,这是一个输出型参数需要用户自己传入,然后它给你带出线程的id。
第二个参数是有关于线程的属性的参数,我们现在不谈论,传参时传空指针就可以。
第三个参数是一个函数指针,这个函数的参数是void*,返回值也是void*,这个函数也就是线程要执行的函数。
这第四个参数就是第三个参数中函数的参数,它是以这种方式来传的。
下面我们就可以来编写一简单的代码了(其实也是我们上一章博客中所写的):
在这里插入图片描述
在这里插入图片描述
当我们写好代码之后直接使用g++编译的时候会出现下面的情况:
在这里插入图片描述
这其实是因为pthead_create函数,它不是系统调用,它是存在于库中的,但是它也不是C/C++标准库,所以我们在编译的时候要加上这么一个选项:
在这里插入图片描述
而pthread库它有一种叫法,叫做系统原生库,顾名思义就是只要有操作系统,那么就一定会携带这个库。
那么这个库为什么会形成单独的库,而不是和系统代码在一起呢?我们上一章说过Linux中不存在真正意义上的线程,只存在轻量级进程,而对于用户来说,我们刚接触Linux的话哪能知道什么是轻量级进程,我们只知道线程,所以操作系统就必须实现出关于线程的一套接口便于用户使用,这也就会形成了一个pthread库了,不和系统代码在一起是因为Linux中真正意义上根本没有线程这个说法。

a. 多线程的创建

既然能创建一个线程,那我们就能够创建多个线程:
在这里插入图片描述
在这里插入图片描述
在这段代码所演示的结果中我们可以看到几个现象:
task_thread函数被多个执行流同时执行,那就说明这个函数被重入了。
CPU对于线程的调度也是随机的,这一点是理所应当的,因为我们刚开始解除CPU的调度的时候,它的调度就不是完全按顺序来的。
假如现在我们对四号线程进行除0的操作:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值