六(6.6)线程内幕
来源:互联网 发布:石头鉴定软件 编辑:程序博客网 时间:2024/06/12 19:17
调用C r e a t e T h r e a d可使系统创建一个线程内核对
象。该对象的初始使用计数是2(在线程停止运行和从C r e a t e T h r e a d返回的句柄关闭之前,线程
内核对象不会被撤消)。线程的内核对象的其他属性也被初始化,暂停计数被设置为1,退出代
码始终为S T I L L A C T I V E(0 x 1 0 3),该对象设置为未通知状态。
一旦内核对象创建完成,系统就分配用于线程的堆栈的内存。该内存是从进程的地址空间
分配而来的,因为线程并不拥有它自己的地址空间。然后系统将两个值写入新线程的堆栈的上
端(线程堆栈总是从内存的高地址向低地址建立)。写入堆栈的第一个值是传递给C r e a t e T h r e a d
的p v P a r a m参数的值。紧靠它的下面是传递给C r e a t e T h r e a d的p f n S t a r t A d d r参数的值。
每个线程都有它自己的一组C P U寄存器,称为线程的上下文。该上下文反映了线程上次运
行时该线程的C P U寄存器的状态。线程的这组C P U寄存器保存在一个C O N T E X T结构(在
Wi n N T. h头文件中作了定义)中。C O N T E X T结构本身则包含在线程的内核对象中。
指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器。记住,线程总是在进程
的上下文中运行的。因此,这些地址都用于标识拥有线程的进程地址空间中的内存。当线程的
内核对象被初始化时, C O N T E X T结构的堆栈指针寄存器被设置为线程堆栈上用来放置p f n S t a r t -
A d d r的地址。指令指针寄存器置为称为B a s e T h r e a d S t a r t的未文档化(和未输出)的函数的地址
中。)
- 六(6.6)线程内幕
- 创建线程的内幕(6)
- 线程(六)EventWaitHandle
- COM 技术内幕学习之六 (HRESULT,GUID)
- 《Struts2技术内幕》 (六)—— XWork容器概览
- 《深入理解Linux网络技术内幕》阅读笔记(六)
- 深入分析java web技术内幕----读书笔记(六)
- .net 线程池内幕
- MySQL 线程池内幕
- MySQL线程池内幕
- .net线程池内幕
- MySQL 线程池内幕
- MySQL 线程池内幕
- .net线程池内幕
- .net线程池内幕
- Java线程(六)-线程的交互
- Java线程(六)----线程池
- APUE之线程(六)
- 时间复杂度为O(n),空间复杂度为O(1)
- cygwin+windows 使用JNI时 .c文件打包成.so
- 怪物生产流水线
- erlang程序优化点的总结
- Linux Kconfig及Makefile学习----2009.10
- 六(6.6)线程内幕
- Apache 在更改DocumentRoot,或新增虚拟目录之后出现403错误的解决方法汇总详解(Linux)
- C++中的头文件和源文件
- VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
- 寻找多数元素(Majority)
- 来吧···带你上天·带你灰
- linux内核的数据结构:2 散列表
- js和jquery中循环的退出和继续
- 的石膏板的信号放大凤凰房产价格将房产价格加工厂