pthread_kill 与pthread_cancel使用方法

Linux·C/C++终止线程的方法 四种终止线程的方法 阅读详情

pthread_kill 与pthread_cancel使用方法

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

void* thread0(void* arg)
{
    pthread_mutex_lock(&mutex);
    printf("in thread 0 tag 1\n");
    pthread_cond_wait(&cond, &mutex);
    printf("in thread 0 tag 2\n");
    pthread_mutex_unlock(&mutex);
    printf("in thread 0 tag 3\n");
    pthread_exit(NULL);
}

void* thread1(void* arg)
{
    sleep(10);
    printf("in thread 1 tag 1\n");
    pthread_mutex_lock(&mutex);
    printf("in thread 1 tag 2\n");
    pthread_cond_broadcast(&cond);
    pthread_mutex_unlock(&mutex);
    printf("in thread 1 tag 3\n");
    pthread_exit(NULL);
}
int main()
{
    pthread_t tid[2];
    if (pthread_create(&tid[0], NULL, thread0, NULL) != 0) 
    {
        exit(1);
    }
    if (pthread_create(&tid[1], NULL, thread1, NULL) != 0) 
    {
        exit(1);
    }
    sleep(5);
    printf("in main thread tag 1\n");
    pthread_cancel(tid[0]);
    //pthread_kill(tid[0],3);
    pthread_join(tid[0], NULL);
    printf("tid0\n");
    pthread_join(tid[1], NULL);
    printf("tid1\n");
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&cond);
    return 0;
}

使用pthread_cancel 结果如下:
in thread 0 tag 1
in main thread tag 1
tid0
in thread 1 tag 1

pthread_cancel kill 掉线程,但是如果有类似拿锁的操作,则要等拿到锁才能kill掉。


pthread_kill 结果如下:

in thread 0 tag 1
in main thread tag 1
Quit

pthread_kill 会对线程0发出signal_quit(3)的系统信号。 如果线程0不处理,则整个进程退出。




GIS小白也能看懂的实战:5步教你将ArcGIS里的等高线和水系完美导入CAD做规划图 本文详细介绍了如何将ArcGIS中的等高线和水系数据高效导入CAD,制作专业规划底图的5个关键步骤。从数据准备、ArcGIS处理到CAD优化,涵盖坐标系设置、数据裁剪、格式转换等实用技巧,特别适合设计规划领域的新手快速掌握GIS与CAD协同工作流程。 阅读详情

相关推荐

Origin作图——等高线图

最近做一个测试数据图,开始想通过用热图来展示,结果发现热图有很多的小方块,很难呈现出最好的效果,因为数据是有一层一层的递进效果,因此经过尝试后,发现等高线图是个好选择。 热图展示效果如下:其中有很多的小方块不适合,热图制图方法前面有记录。 下面展示等高线图制作方法。首先是导入数据,可以从excal导入,也可以直接复制进去。等方法。 选中要展示的数据,绘图----等高线图 选中箭头,确定。 双击图像,点击线,我们需要把线隐藏了. 双击图像,我们需要调色板,根据自己的选择,一般用调色板的颜色。

qq_42278015的博客 1万+

pthread_kill和pthread_cancel

pthread_kill和pthread_cancel 为了讲述标题两个函数,必须先介绍一下pthread线程库。 pthread线程库是遵循POSIX标准开发的,工作非常稳定,性能也不差, 所以在Linux下是最常用的线程库。但从调用上看,pthread线程应该仍然属于用户级的线程库, 其实用户级还是内核级的关键区别只在于线程的调度是由内核还是用户库来完成,用户级对于 一般的服务器工作

Kaiwii的专栏 2万+

跟着Synopsys报告,一步步拆解车规芯片FMEDA计算(含公式与避坑点)

本文详细解析了车规芯片FMEDA计算的全流程,基于Synopsys报告拆解实战指南,涵盖基础失效率建模、安全机制效能评估及安全指标合成等关键步骤。通过公式解析、数据准备清单和避坑点分享,帮助工程师掌握ISO26262标准下的硬件量化分析技术,提升车载系统设计可靠性。

weixin_30460489的博客 195

pthread_cancel 和pthread_kill的区别

1、int pthread_kill(pthread_t thread, int sig); 功能是向指定线程发送信号,信号为0时用于检查此线程ID的线程是否存活。 pthread_kill的返回值: 成功:0 线程不存在:ESRCH 信号不合法:EINVAL 2、pthread_cancel(pthread_t thread); 功能是给线程发送取消信号,使线程从取消点

zxygww的专栏 5689

从零构建MAVLink通信:PX4飞控与QGC的协议握手全解析

本文详细解析了PX4飞控与QGC地面站通过MAVLink协议进行通信的全过程,重点介绍了航点传输协议的状态机设计、INT类型消息的优化优势以及异常处理与调试技巧。通过实战案例和性能优化建议,帮助开发者高效构建无人机通信系统,提升数据传输效率与稳定性。

weixin_29209805的博客 504

COT Buck和普通Buck的区别

传统的电流模控制的调制原理,由时钟脉冲信号 clk 的上升沿触发开始一个新的开关周期,d 由低变高,主开关闭合,流过它的电流和电感电流相等,并以固定斜率逐渐增大,直至 iL *Ri 与斜坡补偿信号 se 的和等于控制信号 vc;此时,比较器的输出电平由低变高,导通时间产生器被触发,其输出 d 由低变高,并产生一个固定的导通时间 Ton;然后 PWM 比较器的输出由低变高,导通时间产生器被触发,主开关闭合,电感电流逐渐增大,直到导通时间产生器计满固定的时间 Ton,d 变为低电平,主开关断开,周期结束。

模拟芯片设计 1128

pthread_kill pthread_cancel

pthread_kill函数的功能是向指定线程发送信号,信号为0时用于检查此线程ID的线程是否存活。 pthread_cancel函数的功能是给线程发送取消信号,使线程从取消点退出。(http://baike.baidu.com/view/8517720.htm) 请在创建的线程中使用signal(SIGKILL,sig_handler)处理信号,如果你给一个线程发送了SIGQUIT,但线程却

cl11010的专栏 1191

在 CentOS7 下安装 Cadence IC验证平台 INCISIVE152

前言 本文所使用的软件 虚拟机软件:VMware Workstation 15 PRO 如何安装? 操作系统:CentOS-7, CentOS-7-x86_64-DVD-1810.iso 如何安装? 简介 INCISIVE Incisive是nc_verilog, nc_sim, nc_lauch,以及ABV,TBV的集合,用于仿真和验证。 InstallScape InstallSc...

沈醉不知的博客 2万+

Linux 多线程开发-线程的结束pthread_kill和pthread_cancel

1、线程结束的方式 (1)线程函数中调用pthread_exit函数,不会导致对象析构,可以使用 (2)线程所属的进程结束,进程调用exit,线程C++对象不会销毁,不安全,属于被动结束 (3)线程函数执行返回return,好的退出方式 (4)线程被同一进程或其他线程通知结束,属于被动结束 2、线程主动结束 线程主动结束使用return或者pthread_exit函数,原型如下: v...

健忘16的博客 3580

BES2700的PMU

BES2700ZP-BES2700芯片的PMU架构分析摘要:本文档分析了BES2700芯片的电源管理单元(PMU)架构。实际应用中仅需为VBAT引脚供电,其余电源均由芯片内部PMU提供。文档包含架构示意图、问题列表和参考链接,涉及PMU工作原理、外部供电要求等关键技术点。待解决问题包括具体供电参数和内部电源转换机制等。通过添加日志信息和代码片段,为开发人员提供了调试PMU功能的实用方法。

云淡风轻 117

使用自己的数据跑通mmsegmentation

使用自己的数据跑通mmsegmentation,解决以下报错:1)type object 'FileClient' has no attribute 'infer_client' 2)It is expected output_size equals to 2, but got size 3 3)训练测试结果报NAN 4)KeyError: 'MyDataset is not in the dataset registry' 5)预训练模型和加载的网络结构层名有差异,unexpected key .....

猫猫与橙子的博客 1656

linux下的线程创建相关API函数(pthread _create、pthread _join、pthread _detach、pthread _concel、pthread _kill)

linux下的线程创建以及线程通讯相关API函数线程创建相关API函数pthread _create(创建线程函数)1. 头文件2. 函数原型3. 参数说明4. 返回值:5. 举例说明:6、传递不同参数pthread_join()1. 含义2. 背景3. 函数原型4. 第二个参数说明5. 终止状态(线程返回值)6、回收子线程的返回值pthread_detach()1、背景2、函数原型3、返回值4、detached状态 线程创建相关API函数 pthread _create(创建线程函数) 1. 头文件 #

JMW1407的博客 3013

cesium加载geotiff的 四种方法

本文介绍了在Cesium中加载GeoTIFF数据的两种主要方法。首先解析了核心前置知识,包括坐标系匹配、数据类型区分和性能优化。方法1详细演示了如何将RGB影像GeoTIFF转换为Cesium影像图层,包含从数据解析到Canvas转换的完整代码流程。方法2则针对高程数据(DEM)处理,展示了前端直接解析构建地形网格的方案。文章提供了完整的代码示例和关键实现要点,适用于卫星影像、专题图和数字高程模型等多种GeoTIFF数据类型在三维场景中的可视化需求。

大剑师兰特的GIS世界 394

pthread.h 相关函数使用方法集锦之线程操作

前言 pthread(POSIX thread),简称为pthread,是线程的POSIX标准,在类Unix操作系统中(Unix、Linux、Mac OS X等),都是用pthread作为操作系统的线程。<pthread.h>作为其编程标准的头文件,本文探讨里面的常用函数意义以及使用方法。 线程 pthread_create pthread_create是UNIX环境创建线程函...

kunkliu的博客 1296

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pthread_cancel() NDK不支持

pthread_cancel() 我用cmake在ndk环境下编译,pthread库没有这个函数,我原以为是cmake的问题,后来查明是 NDK不支持 .. 只能用  pthread_kill  //pthread_join和pthread_detch好像停不了线程

Keivin 3981

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

如何不使用pthread_cancel而杀死线程

During the time I use standalone cross compliers to build my system, I find there is NO pthread_cancel in pthread.h (/home/dengwei/standalone-toolchain/sysroot/usr/include/pthread.h). Shocked by that...

weixin_30247781的博客 84

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

如何退出线程

      之前对于线程如何退出一直不是特别清楚,以前发现用pthread_kill函数退出线程没有效果,今天看了一些别人的博客才发现线程退出的原理,而且pthread_kill函数只是向特定的线程发信号。下面是一些如何在死循环中结束线程的方法。        第一:可以利用pthread_kill函数向线程发信号,而后在信号处理函数里面设置一个flag,当线程中检测到该该flag置位后退出死循...

linux_c_language的博客 3365

pthread 立即停止线程_如何结束一个线程?如何判断一个线程是否还在运行?

http://yuanshuilee.blog.163.com/blog/static/2176972752013111643711248/2013如何结束一个线程?在一个通信客户端中,创建了接收线程和发送线程。我想实现的是,接收线程一旦收不到服务器的保活消息,或者检测到服务器已经关闭,那么我需要关闭接收线程,回收socket资源,同时要主动关闭发送线程。int pthread_cancel(pt...

weixin_29786123的博客 1118

android ndk thread,c-pthread_cancel()替代在Android NDK?

可能的选择,适用于这个家伙:http://igourd.blogspot.com/2009/05/work-around-on-pthreadcancel-for.html在这里转载:Then I use pthread_kill to trigger aSIG_USR1 signal and use signal handlerto exit this pthread and tried it,...

weixin_30682043的博客 365

pthread 立即停止线程,如何停止正在运行的pthread线程?

How can I exit or stop a thread immediately?How can I make it stop immediately when the user enters an answer?I want it to reset for every question.Here's my code where threading is involvedint q1() {...

weixin_28745309的博客 479

pthread 立即停止线程_如何停止正在运行的pthread线程?

How can I exit or stop a thread immediately?How can I make it stop immediately when the user enters an answer?I want it to reset for every question.Here's my code where threading is involvedint q1() {...

weixin_42522575的博客 269

Linux结束线程的方法,深度好文

》 Linux结束线程的方法,深度好文。     引用 http://www.cnblogs.com/Creator/archive/2012/03/21/2408413.html 》 ndk不支持pthread_cancel, pthread_join也是调用了也无效(在被结束线程阻塞的情况下)。只支持pthread_kill;

技行天下的博客 1731

c如何正常中断一个运行的线程

最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使用场景讨论如何正确的终止正在运行的子线程。其实本文更确切的说是解决如何从待终止线程外部安全的终止正在运行的线程 首先我们来看一下,让当前正在运行的子线程停止的所有方法 1.任何一个线程调用exi...

liweigao01的专栏 1536
上一篇: linux phread_detach 用法
下一篇: C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
oj_fang
博客等级 码龄14年 6粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值