SylixOS中的线程【5】--- 线程结束
概述
线程结束意味着线程生命周期终止。线程结束包括线程取消、线程退出和线程删除 3 种情况。
API | 说明 |
---|---|
API_ThreadDelete | 线程删除函数。 |
API_ThreadForceDelete | 线程强制删除函数。 |
API_ThreadExit | 线程自行退出。 |
exit | 内核线程或者进程退出 |
_exit | 内核线程或者进程退出, 不执行 atexit 安装的函数 |
atexit | 进程退出时执行的操作. (当使用多进程模式时, 将会使用 vp patch 重定向) |
线程删除
线程删除是将线程的资源返还给操作系统,删除后的线程不能再被调度。
/*********************************************************************************************************
** 函数名称: API_ThreadDelete
** 功能描述: 线程删除函数。
** 输 入 :
** pulId 句柄
** pvRetVal 返回值 (返回给 JOIN 的线程)
** 输 出 :
*********************************************************************************************************/
ULONG API_ThreadDelete (LW_OBJECT_HANDLE *pulId, PVOID pvRetVal)
/*********************************************************************************************************
** 函数名称: API_ThreadForceDelete
** 功能描述: 线程强制删除函数
** 输 入 :
** pulId 句柄
** pvRetVal 返回值 (返回给 JOIN 的线程)
** 输 出 :
*********************************************************************************************************/
ULONG API_ThreadForceDelete (LW_OBJECT_HANDLE *pulId, PVOID pvRetVal)
调用上面的两个函数可使线程结束,并释放线程资源,由于 SylixOS 支持进程,所以删除线程只能是同一个进程中的线程,而且主线程只能由其自己来删除。
主动删除其他正在执行的线程,可能造成其加锁的资源得不到释放,或者原子操作被打断,所以除非确保安全,否则 SylixOS 以及任何其他操作系统都不推荐直接使用线程删除函数调用。在应用程序设计时,应考虑使用“请求”删除方式,当线程自己发现无事可做或者被请求删除时,由线程自己删除自己(线程退出)。
线程退出
线程退出就是线程自己调用线程删除函数,以便安全的收回线程资源。
/*********************************************************************************************************
** 函数名称: API_ThreadExit
** 功能描述: 线程自行退出。
** 输 入 : pvRetVal 返回值 (返回给 JOIN 的线程)
** 输 出 : 成功返回 ERROR_NONE,失败返回错误号;
*********************************************************************************************************/
ULONG API_ThreadExit (PVOID pvRetVal)
/*********************************************************************************************************
** 函数名称: exit
** 功能描述: 内核线程或者进程退出
** 输 入 : iCode 返回值
** 输 出 :
*********************************************************************************************************/
void exit (int iCode)
/*********************************************************************************************************
** 函数名称: _exit
** 功能描述: 内核线程或者进程退出, 不执行 atexit 安装的函数
** 输 入 : iCode 返回值
** 输 出 :
*********************************************************************************************************/
void _exit (int iCode)
/*********************************************************************************************************
** 函数名称: atexit
** 功能描述: 进程退出时执行的操作. (当使用多进程模式时, 将会使用 vp patch 重定向)
** 输 入 : iCode 返回值
** 输 出 :
*********************************************************************************************************/
int atexit (void (*func)(void))
线程取消
线程取消的方法是向目标线程发送 Cancel 信号,但如何处理 Cancel 信号则由目标线程自己决定,需要注意的是,线程取消是一个复杂的过程,需要考虑资源的一致性问题。
/*********************************************************************************************************
** 函数名称: API_ThreadTestCancel
** 功能描述: 检测线程是否有请求取消标志, 当条件满足时自动取消.
** 输 入 :
** 输 出 :
*********************************************************************************************************/
VOID API_ThreadTestCancel (VOID)
/*********************************************************************************************************
** 函数名称: API_ThreadCancel
** 功能描述: 取消一个指定的线程
** 输 入 : pulId 线程句柄
** 输 出 : ERROR_NONE or ESRCH
*********************************************************************************************************/
ULONG API_ThreadCancel (LW_OBJECT_HANDLE *pulId)
/*********************************************************************************************************
** 函数名称: API_ThreadSetCancelState
** 功能描述: 设置取消线程是否使能,
** 输 入 : iNewState 更新的状态
** piOldState 先早的状态
** 输 出 : EINVAL 参数错误
** 0
*********************************************************************************************************/
ULONG API_ThreadSetCancelState (INT iNewState, INT *piOldState)
/*********************************************************************************************************
** 函数名称: API_ThreadSetCancelType
** 功能描述: 设置当前线程被动取消时的动作,
** 可以为 PTHREAD_CANCEL_ASYNCHRONOUS or PTHREAD_CANCEL_DEFERRED
** 输 入 :
** iNewType 新类型
** piOldType 先早类型
** 输 出 : ERRNO
*********************************************************************************************************/
INT API_ThreadSetCancelType (INT iNewType, INT *piOldType)
SylixOS中的线程【5】--- 线程结束相关推荐
- C++:多线程中的小白(2)线程启动、结束、创建线程、join、detach
目录 一.范例演示:线程运行的开始和结束 二.其他创建线程的手法 一.范例演示:线程运行的开始和结束 (1)thrad (2)join()函数 (3)detach()函数 (4)joinable()函 ...
- python 强制结束线程_在python中实现强制关闭线程的示例
Python 如何强制关闭线程过去只可以用来回忆,别沉迷在阴影中,否则永远看不清前面的路. Python用sleep停止一个线程的运行,而不影响主线程的运行,案例代码如下: from threadin ...
- java 如何结束线程_java中,如何安全的结束一个正在运行的线程?
问题 Java中提供了很多调度线程的方法,上一节介绍了其中一种控制线程的方法:如何等待一个线程结束.那么如果不希望等待线程结束,而是根据问题的需要随时都要中断线程使其结束,这种对线程的控制方法该如何实 ...
- python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...
GIL锁 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行 ...
- 第二节 线程启动、结束、创建线程多个方法、join()、detach()
1.范例演示线程运行的开始和结束 可执行程序运行起来,生成一个进程,该进程所属的主线程开始自动运行. #include <iostream> #include <vector> ...
- C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- java线程 yield_Java线程中yield与join方法的区别
长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...
- Java中的进程与线程
2019独角兽企业重金招聘Python工程师标准>>> Java中的进程与线程 概念 进程与线程,本质意义上说, 是操作系统的调度单位,可以看成是一种操作系统 "资源&qu ...
- 浅谈线程池(中):独立线程池的作用及IO线程池
在上一篇文章中,我们简单讨论了线程池的作用,以及CLR线程池的一些特性.不过关于线程池的基本概念还没有结束,这次我们再来补充一些必要的信息,有助于我们在程序中选择合适的使用方式. 独立线程池 上次我们 ...
最新文章
- SQLer:无需编程语言即可将SQL查询转换为RESTful API的工具
- 数据库副本的自动种子设定(自增长)
- 评估数据源是否回溯_IAI Trade:蒙特卡洛模拟在回溯检验中的应用
- sql语句的执行过程和优化
- 华为p10 鸿蒙,全面上线!华为鸿蒙新消息传来,这是要彻底替换安卓
- torch.randn
- Systemview5安装的问题:the license for this version of systemview has expired......
- Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得...
- js实现全国省份下拉
- 第三方支付清算的信息流与资金流
- c语言中人脸磨皮算法,人脸磨皮算法
- 《Gpu Gems》《Gpu Pro》《Gpu Zen》系列读书笔记
- 报刊订阅管理系统数据库
- dw怎么在框架中加入网页_DW中制作框架网页.ppt
- 神州数码:我国市民卡发展之路探讨
- 云桌面-ThinVirt3-EXP操作手册(一)云桌面系统安装
- IntelliJ IDEA启动tomcat报错:Disconnected from server
- 风控策略分析师日常--代码、数据、策略
- ubuntu14.04使用reaver跑pin码
- HTML播放华为云视频流,华为云点播服务视频管理功能强大,上云就是省心