博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pthread_cancel 相关
阅读量:5914 次
发布时间:2019-06-19

本文共 1719 字,大约阅读时间需要 5 分钟。

假设线程A对线程B发出了一个取消请求。通过如下函数:

#include 
int pthread_cancel(pthread_t thread); 参数: thread - 收到取消请求的线程id 返回值: 发送终止信号给thread线程,如果成功则返回0,否则为非0值。发送成功并不意味着thread会终止。

 线程B如何反应呢?

这取决线程的两个状态属性,它们决定了该线程收到取消请求时的行为,下面给出这两个字段的意义和用法。

(1)线程的cancelability state

字段可以取值为:enabled (默认) or disabled。当取值为enabled,由cancelability type属性决定线程的行为。当取值为disabled,线程不可被取消,但取消请求还是会被接受。

#include 
int pthread_setcancelstate(int state, int *oldstate);参数:state - 设置线程的取消state,可以取如下值PTHREAD_CANCEL_ENABLE(默认取值)PTHREAD_CANCEL_DISABLEoldstate - 用作保存线程之前的取消state

(2)线程的cancelability type 

#include 
int pthread_setcanceltype(int type, int *oldtype);参数:type - 取值如下PTHREAD_CANCEL_DEFERRED(默认取值)取消请求会被推迟到调用一个是cancellation point的函数,参看http://man7.org/linux/man-pages/man7/pthreads.7.html PTHREAD_CANCEL_ASYNCHRONOUS 线程可以在任何时候被取消。(通常,线程只要接收到取消请求,便会直接被取消。但是系统不保证这一点)。 oldtype - 保存旧的type

 

 一个例子

#include 
#include
#include
void wait() { for(int i = 0; i < 10000; i++){ for (int j = 0; j < 1000; j++){ int k = 4; } }}void* PrintHello(void* threadid) { wait();//延时,等待足够时间以至于能够使得这个线程接收到取消请求。不用sleep函数是因为,这里需要测试pthread_testcancel函数是否是取消点,然而sleep也是取消点 pthread_testcancel();// printf("hi\n"); //这一行不会被打印 pthread_exit(NULL);}int main(){ pthread_t tid; pthread_create(&tid, NULL, PrintHello, NULL); pthread_cancel(tid);//对tid对应的线程发送一个取消请求 pthread_exit(NULL); return 0;}

 

1.需要的头文件

#include 

2.编译指令

gcc main.c -lpthread

3.相关概念

http://man7.org/linux/man-pages/man3/pthread_setcancelstate.3.html

转载于:https://www.cnblogs.com/Dream-Chaser/p/7489239.html

你可能感兴趣的文章
JS将秒转换为 天-时-分-秒
查看>>
Facebook 电面 02/01 2018
查看>>
让你的博客不再单调 --博客园设置随机背景图片教程
查看>>
<x:choose/>、<x:when/>、<x:otherwise/>标签
查看>>
开篇章
查看>>
数据库做分表查询
查看>>
百度云盘-真实地址 F12 控制台
查看>>
ios-表视图-demo3-单选
查看>>
linux线程的实现【转】
查看>>
你知道市面上机器人都用哪些操作系统吗【转】
查看>>
Maven项目pom.xml文件简单解析
查看>>
Daily Scrum - 11/19
查看>>
购物车程序练习
查看>>
Ubuntu12.04_X64 apt-get install 报错404
查看>>
CentOS 7 更新源 – 使用国内 163 yum 源
查看>>
SecureCRT 7.0 如何自动记录日志
查看>>
memcache命令
查看>>
tomcat8.5报错
查看>>
EPANET头文件解读系列8——FUNCS.H
查看>>
http 状态码(转载)
查看>>