Windows学习(008)--线程(二)

本文深入探讨Windows线程的生命周期,从创建到死亡,介绍_startthreadex和CreateThread的区别,并讨论线程的启动、运行、挂起、恢复和休眠等状态。内容包括线程内核对象、栈、线程上下文结构体,以及线程安全的实现机制。
摘要由CSDN通过智能技术生成

线程启动到死亡

  1. 创建线程的内核对象
    • 使用计数,为2
    • 暂停计数,是一个UINT类型,这就意味着,一个线程会被暂停多次,当暂停计数为0时,这个线程才将会被执行,为1
    • 退出代码,此时的退出代码为STILL_ACTIVE
    • Signaled,开始为FALSE

    • 在栈顶会有lpParam和lpfnAddr
  2. CONTEXT线程上下文结构体,线程上一次运行时的寄存器

    • EIP(指令寄存器),指示下一条代码在哪运行,最开始会指向RtlUesrThreadStart(未公开的函数),当调用CreatrThread函数时,CreatrThread会去调用RtlUesrThreadStart函数
    • ESP(栈寄存器),指向栈顶,也就是lpfnAddr
  3. 暂停计数减1,为0后,交给CPU调度

  4. RtlUesrThreadStart

    • 设置一个结构化异常SEH
    • 调用线程函数,lpParam传入进去
    • 等待线程的返回
    • 当函数返回时,会调用ExitThread,并把线程函数的返回值给ExitThread函数
    • 使用计数减1

_beginthreadex和CreateThread

  1. _beginthreadex,在process.h头文件中,属于纯C/C++多线程运行库

        uintptr_t _beginthreadex( // MANAGED CODE
         
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值