线程创建当中遇到的一些自我理解

本文详细介绍了在Linux环境下创建线程的具体方法,重点解析了pthread_create函数的使用及参数意义。文章通过实例展示了创建线程时常见的错误及其解决办法,强调了在创建线程时添加动态库pthread的重要性。

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

首先说明一下我们的线程是在Linux下创建的,即pcb模拟线程。

  • 扫一眼man手册里面的用法说明

在这里插入图片描述

创建线程
int pthread_create(pthread_t *thread, pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
thread: 用于获取线程id(用户态的线程id)
attr: 设置线程属性,通常置NULL
start_routine:线程入口函数,线程所运行的代码
arg: 线程入口函数的参数
返回值:成功:0 失败:非0

看一段创建的代码然后在说一下遇到的坑

在这里插入图片描述

  • 然后我们vim makefile,准备运行了,发现怎么都运行不了
  • 检查代码怎么也没有发现错误

在这里插入图片描述

  • 显示这个报错我们还以为是没有定义,怎么找也找不到错误

  • 最后makefile一下,终于还是发现了错误
    在创建多线成时候一定要添加动态库啊
    这个一定要记住,要不是半天都找不到错误,如果是和我一样的菜鸡
    在这里插入图片描述
    添加动态库-pthread以后我们的代码运行,发现就没有问题了
    这里为什么进程我们一般情况下不需要添加这个动态库了,但是线程就需要添加了,这里是自己的一些简单看法。

  • 先看一张画的很丑,很简陋的代码在内存中存储发布图吧。
    在这里插入图片描述

  • 我用红色标记了一个tid创建线程时候需要的返回值

  • 我们需要理解的是我们的动态库可以在多个进程之间共享,使用动态库链接是的可执行文件更小,节省了磁盘空间。操作系统采用虚拟导致内存机制允许物理内存中一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。

  • 动态库链接的仅仅是执行文件人口函数的一个表,所以在线程创建为了取得线程之间关联性,这个tid线程的返回地址非常重要。

  • 我们的线程中动态库指向在共享区,这个tid返回值在线程共享区首地址位置,然后通过这个动态链接执行可执行程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值