调用pthread_create时系统做了哪些事情

本文介绍了pthread_create函数在创建新线程时的关键步骤,包括线程ID分配、属性设置、堆栈空间分配、上下文初始化、启动例程设置和状态设置。重点讨论了线程在多核处理器上的并发执行以及退出线程时的资源管理。
摘要由CSDN通过智能技术生成

pthread_create函数是POSIX线程(也称为pthreads)库中创建新线程的核心函数。它在Linux和其他类UNIX操作系统中被广泛使用。当你调用pthread_create时,系统会执行以下主要步骤:

  • 线程标识符分配:系统为新线程分配一个唯一的线程ID。这个ID在后续的线程管理操作中被用来标识这个线程。

  • 线程属性设置:线程的属性(如堆栈大小、调度策略等)根据传入pthread_create的pthread_attr_t参数进行配置。如果该参数为NULL,将使用默认的线程属性。

  • 堆栈空间分配:为新线程分配堆栈空间。堆栈大小可以通过线程属性指定,或使用系统默认值。

  • 初始化寄存器和线程上下文:设置新线程的程序计数器(PC)、堆栈指针(SP)等寄存器,并初始化新线程的执行上下文以准备运行。

  • 启动例程设置:将传给pthread_create的函数指针作为新线程的启动例程(即新线程将从此函数开始执行)。同时,将相应的参数传递给这个启动例程。

  • 线程状态设置:将新线程的状态设置为可运行(RUNNABLE),并插入到系统的调度器中,等待CPU时间片以便执行。

  • 返回控制权:pthread_create函数返回到调用者线程,创建过程完成。如果成功,返回0;否则返回一个错误码。

调用上述函数后,调用线程和新线程的时序如下:

调用线程
       |
       | pthread_create()
       V
    (1) 分配线程ID
    (2) 配置线程属性
    (3) 分配堆栈空间
    (4) 初始化线程上下文
    (5) 设置启动例程和参数
    (6) 线程状态设置为可运行
       |
       | 返回
       V
   继续执行...

新线程
      | 等待调度...
      V
(6) 获得CPU时间片
      |
      | 运行启动例程
      V
    执行...

需要注意的是,在多核处理器上,新创建的线程可能立即在另一个核心上开始执行,而调用pthread_create的线程继续在原来的核心上执行。这意味着,两个线程的执行是并发进行的。退出线程时(通过返回从启动例程或调用pthread_exit)会释放线程的执行上下文和部分资源,但线程的标识符和某些资源会保持不变,直到调用pthread_join或采取类似措施以回收这些资源。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值