社区
进程/线程/DLL
帖子详情
关于线程运行和线程内核对象的关系
stoat
2008-08-29 09:13:46
每个线程都有其内核对象,内核对象中有对线程引用的计数。当用GetCurrentThread()等函数或取线程句柄时,计数就会增加;当用CloseHandle()释放线程句柄时,计数就减少。计数减为0时,内核对象就被释放。
那么这个内核对象的计数和线程的运行有什么关系?
若计数减为0时,线程还没运行完,系统会怎么处理?
...全文
209
6
打赏
收藏
关于线程运行和线程内核对象的关系
每个线程都有其内核对象,内核对象中有对线程引用的计数。当用GetCurrentThread()等函数或取线程句柄时,计数就会增加;当用CloseHandle()释放线程句柄时,计数就减少。计数减为0时,内核对象就被释放。 那么这个内核对象的计数和线程的运行有什么关系? 若计数减为0时,线程还没运行完,系统会怎么处理?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lhsxsh
2008-08-29
打赏
举报
回复
回答的不错。学习了
liyinlei
2008-08-29
打赏
举报
回复
GetCurrentThread() 获取的线程句柄 是个伪句柄,并不会增加计数,用CloseHandle来释放这个伪句柄,也不会影响计数。
当内核对象的引用计数为0时,系统会释放内核对象。
线程的内核对象含有 大部分管理该线程的系统信息,如线程的退出码,线程的挂起计数等等。
当线程退出时,会对线程内核对象做如下事情:将内核对象的状态变为有信号,设置线程的退出码,引用计数减1。
内核对象不会被自动释放,除非所有指向该对象的外部指针都已经关闭,也就是说引用计数为0时,才释放。
不会出现“计数减为0时,线程还没运行”的情况。 线程在运行时,计数至少是1
pangqi022
2008-08-29
打赏
举报
回复
[Quote=引用 1 楼 jasonshark 的回复:]
有两个计数,一个是CloseHandle可以减掉的,这个是HandleCount,另外还有一个总的PointerCount = HandleCount + ReferenceCount, ReferenceCount是内核里使用的,比如Scheduler要调度你的线程,就肯定得拿一个ReferenceCount, 这个是CloseHandle搞不掉的. 内核对象是否被释放看的是总的PointerCount,不是看HandleCount
[/Quote]
学习了!
jasonshark
2008-08-29
打赏
举报
回复
有两个计数,一个是CloseHandle可以减掉的,这个是HandleCount,另外还有一个总的PointerCount = HandleCount + ReferenceCount, ReferenceCount是内核里使用的,比如Scheduler要调度你的线程,就肯定得拿一个ReferenceCount, 这个是CloseHandle搞不掉的. 内核对象是否被释放看的是总的PointerCount,不是看HandleCount
jasonshark
2008-08-29
打赏
举报
回复
不会,CloseHandle以后句柄就失效了,也就没有从Handle到object的映射关系了,再CloseHandle会返回错误的. 这里说的都是实句柄, 伪句柄就更没关系了
stoat
2008-08-29
打赏
举报
回复
那我对同一个句柄多次掉用closeHandle(),会有什么结果。HandleCount 会变为负的么?那PointerCount也有可能变成0了。
java
内核
线程
和用户
线程
_用户
线程
与
内核
线程
的对应
关系
程序一般不会直接去使用
内核
线程
,而是去使用
内核
线程
的一种高级接口——轻量级进程(Light Weight Process,LWP),轻量级进程就是我们通常意义上所讲的
线程
(达内长沙java培训在这称它为用户
线程
),由于每个轻量级进程都由一个
内核
线程
支持,因此只有先支持
内核
线程
,才能有轻量级进程。用户
线程
与
内核
线程
的对应
关系
有三种模型:一对一模型、多对一模型、多对多模型,在这以4个
内核
线程
、3个用户...
用户级
线程
映射
内核
级
线程
(转侵删)
内核
线程
是操作系统维护的
线程
对象
。 它是一个实际的
线程
,能够由处理器调度和执行。 通常,系统
线程
是具有权限设置,优先级等的重量级
对象
。
内核
线程
调度程序负责调度
内核
线程
。 用户程序也可以创建自己的
线程
调度程序。 他们可以创建自己的“
线程
”并模拟上下文切换以在它们之间切换。 但是,这些
线程
不是
内核
线程
。 每个用户
线程
实际上不能单独
运行
,并且用户
线程
运行
的唯一方法是实际告诉
内核
线程
执行用户线...
系统
线程
(
内核
线程
)和用户
线程
区别
文章目录系统
线程
(
内核
线程
)和用户
线程
区别进程 、
线程
系统
线程
和用户
线程
用户
线程
优点缺点系统
线程
优点缺点两者
关系
往往实现这样的模型。可把另外⼀个任务调度到这个系统
线程
上执⾏往往在系统
线程
之上做⼀次抽象参考链接
内核
线程
和用户
线程
的区别
内核
级
线程
切换用户级
线程
内核
线程
的实现分两用户
线程
运行
在一个中间系统上面。用户级
线程
和
内核
级区别
内核
线程
优用户
线程
优参考链接 系统
线程
(
内核
线程
)和用户
线程
区别 进程 ...
进程、
线程
及
内核
对象
进程、
线程
及
内核
对象
内核
对象
每个
内核
对象
只是
内核
分配的一个内存块,并且只能由该
内核
访问,这个内存块是一种数据结构,他的成员负责维护该
对象
的各种信息,如进程
对象
有一个进程ID、一个基本优先级和一个退出代码。 由于
内核
对象
的数据结构只能被
内核
访问,so应用程序是无法在内存中找到这些数据结构的并直接改变其内容的。Windows提出这个限制为了确保
内核
对象
结构保持状态的一致,也是为了保证M
Java | Java
线程
模型 | 用户
线程
|
内核
线程
概述 在以前的操作系统中,没有
线程
的概念。进程是资源分配和调度的最小单元。引入
线程
的概念以后,
线程
则是资源调度和分配的最小单元。
线程
又分为用户
线程
和
内核
线程
。 用户
线程
:语言层面创建的
线程
,比如 java语言中多
线程
技术,通过语言提供的
线程
库来创建、销毁
线程
。
内核
线程
:
内核
线程
又称为守护
线程
Daemon
线程
,用户
线程
的
运行
必须依赖
内核
线程
,通过
内核
线程
调度器来分配到相应的处理器上。
线程
模型...
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章