目录

  • pthread_cancel 杀死(取消)线程
  • 取消选项
    • ① 可取消状态:PTHREAD_CANCLE_ENABLE、PTHREAD_CANCLE_DISABLE
    • ②取消类型(推迟取消):PTHREAD_CANCLE_DEFFERED、PTHREAD_CANCLE_ASYCHRONOUS

pthread_cancel 杀死(取消)线程

int pthread_cancel(pthread_t thread);

  • 作用:在主线程中,取消线程ID=thread的线程
  • 注意事项:要杀死的子线程的线程处理函数内部,必须做过一次[系统调用]。换句话说,取消点必须是[系统调用],如果被取消的线程没有系统调用,则该线程不能被取消。
  • 说明:如果你不知道线程函数是否有系统调用(是否能被pthread_cancle取消)---->则可以使用pthread_testcancel()函数设置一个取消点,以便于线程能够被取消。

取消选项

    有两个线程属性没有包含在pthread_attr_t结构中,它们是可取消状态可取消类型,这两个属性影响着线程在响应pthread_cancle函数调用时所呈现的行为。

① 可取消状态:PTHREAD_CANCLE_ENABLE、PTHREAD_CANCLE_DISABLE

#include<pthread.h>
int pthread_setcanclestate(int state,int* oldstate);[设置]当前的可取消状态为state,将原来的可取消状态保存在oldstate中

(1) 线程启动时,默认是PTHREAD_CANCLE_ENABLE。
(2) 当状态是PTHREAD_CANCLE_DISABLE时,对pthread_cancle的调用并不会杀死线程,相反,取消请求对这个线程来说还处于挂起状态,当取消点状态再次变成PTHREAD_CANCLE_ENABLE时,线程将在下一个取消点上对所有挂起的取消请求进行处理。

②取消类型(推迟取消):PTHREAD_CANCLE_DEFFERED、PTHREAD_CANCLE_ASYCHRONOUS

    调用pthread_cancle后,在线程到达取消点之前,并不会出现真正的取消。可以通过调用调用pthread_setcancletype来修改取消类型。
(1)当且仅当取消状态设置为PTHREAD_CANCLE_ENABLE时,pthread_setcanclestate的调用才会生效,否则,不生效
(2)当收到取消信号后,线程的运行状态如下:
    PTHREAD_CANCLE_DEFFERED—继续运行到下一个取消点再退出
    PTHREAD_CANCLE_ASYCHRONOUS—立即执行取消动作再退出

代码案例


void 线程A的callbackfunc(){//忽略取消信号,取消信号变为未决信号pthread_setcanclestate(PTHREAD_CANCLE_DISABLE,..);sleep(5); //线程不终止,将一直sleep 5秒//执行完该函数后,取消未决信号将到来,线程A被终止pthread_setcanclestate(PTHREAD_CANCLE_ENABLE,..);sleep(5);
}int main(){创建线程Apthread_cancle(pid_A); //向线程A发送取消信号sleep(2);pthread_join(pid_A);
}

线程取消pthread_cancle、取消选项相关推荐

  1. 【PTHREAD】线程退出与取消

    1 线程退出 线程正常退出的几种方式: 在线程工作函数中调用pthread_exit,此时可使用pthread_join接收pthread_exit的参数值 线程工作函数运行结束 同一进程中的任意一个 ...

  2. 线程中task取消_Rust Async: async-task源码分析

    async-std是rust异步生态中的基础运行时库之一,核心理念是合理的性能 + 用户友好的api体验.经过几个月密集的开发,前些天已经发布1.0稳定版本.因此是时候来一次深入的底层源码分析.asy ...

  3. 苹果系统这么没有关闭订阅服务器,iPhone 上没有取消订阅的选项怎么办?

    如果您在 iPhone 上订阅了应用提供的服务或内容,在取消订阅之前,大部分应用会自动续订.为了避免不必要的付费,用户可以前往 iPhone 设置-Apple ID-订阅中查看所有订阅的内容,并在此取 ...

  4. html取消select下拉,取消下拉选项_jquery如何取消选择select下拉框

    摘要 腾兴网为您分享:jquery如何取消选择select下拉框,中邮网院,天天美剧,搜狐视频,七哈小说等软件知识,以及比特彗星,cad素材包,交易猫app,视频调色软件,网易云歌单,小米温湿度传感器 ...

  5. java取消_java – 取消之前的请求

    对于每个请求,都会发生很多计算.平均而言,回复大约需要10分钟来处理.现在同时,如果用户发送新请求;以前的请求绝对没有意义继续下去. 所以我编写了一个代码,我基本上打断了执行它的前一个线程.在tomc ...

  6. win11菜单栏的推荐项目怎么取消 windows11取消推荐项目的设置方法

    随着windows11系统的发布,很多用户都安装升级了Win11系统,但是最近有很多用户反应进入Win11系统之后,有很多的小伙伴都看到了开始菜单出现了很多的推荐项目不仅容易误点还很影响美观,不知道如 ...

  7. win11用户账户如何取消 windows11取消用户账户的设置方法

    在使用Win11系统过程中,用户账户控制其实很影响日常的使用体验,那么该怎么将其取消呢?下面就和大家分享一下如何更改win11用户账户控制设置吧,大家可以根据步骤自己操作一下.更多win11系统教程, ...

  8. 计算机默认应用程序怎么取消,如何取消默认打开的QQ浏览器

    打开浏览器时,总是会弹出QQ浏览器,但是在通常情况下,QQ浏览器并不常用.如何确保成功设置默认的QQ浏览器?如何取消此默认设置?让我们跟随学习编辑器看一下设置和取消默认打开的QQ浏览器的教程. 默认取 ...

  9. html默认打开方式怎么取消,怎么取消默认打开QQ浏览器

    打开浏览器总是弹出QQ浏览器,但是平时不是很常用QQ浏览器,如何保证成功设置默认qq浏览器?该怎么取消这个默认设置呢?下面跟着学习啦小编一起来看看设置和取消默认打开QQ浏览器的教程. 取消默认打开QQ ...

最新文章

  1. 使用TextRank算法为文本生成关键字和摘要
  2. Makefile 使用总结【转】
  3. UA MATH571A QE练习 R语言 多重共线性与岭回归
  4. 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量
  5. java抽象工厂模式_Java 抽象工厂模式
  6. 强化学习5——价值函数近似(VFA)
  7. 给定数组 求和等于固定值 算法_别人家的面试题:不可变数组快速范围求和
  8. 关于ArcMap中的地图文档单位
  9. chrome浏览器最小字号解决方案
  10. C++:Vector和List的实现
  11. java bitset_Java BitSet intersects()方法与示例
  12. String中删除空格的7种方法!
  13. ecshop 模板页php,解决ecshop新建页面分页问题
  14. 达摩院 2020 预测:量子霸权指日可待!
  15. 蓝桥杯每日真题之砝码称重(01背包)
  16. [基础]同步消息和异步消息传递的区别?
  17. 基于SSM框架的BS微博系统的设计与实现
  18. 电脑QQ登录后将显示的界面由“空间”改为“消息”
  19. Android-系统服务-ClipboardManager
  20. 你对锁的理解?如何手动模拟一个死锁?

热门文章

  1. 使用 Multiprocessing.Pool.map_async 报错 attribute lookup <lambda> on __main__ failed 的解决
  2. 基于FPGA的图像均衡处理
  3. 2018年存量厮杀,手机厂商如何贴身肉搏?
  4. 手痒想写项目?我挑了 10 个开源项目送你
  5. twilio php 发送短信,在PHP中通过twilio发送短信
  6. 最新《动手学习深度学习》配套课程视频、笔记、ppt等资源整理分享
  7. cemu无法在计算机上打开,1.16版本的cemu打不开是怎么回事
  8. 家庭组网-mesh组网
  9. 一维码扫描, 谢谢
  10. 2010年上半年网络管理员上午试卷参考答案与解析