pthread_cancel手册翻译
创始人
2024-04-02 16:31:36
0

原文链接:https://editor.csdn.net/md/?not_checkout=1&spm=1010.2135.3001.5352

NAME

pthread_cancel - 向线程发送取消请求。

SYNOPSIS

#include 
int pthrread_cancel(pthread_t thread);

编译,并用-pthread链接。

DESCRIPTION

pthread_cancel()函数向thread线程发送取消请求。至于是否以及何时目标线程会对取消请求做出响应,依赖于该线程控制下的两个属性: 它的可取消状态(cancelability state)和类型( type)。

cancelability state

  • 一个线程的可取消状态(cancelability state)(这由pthread_setcancelstate(3)确定),可以启用(新线程默认开启)或禁用。
  • 如果一个线程禁用了取消性(cancellation),那么一个取消请求会一直保留在队列里,直到这个线程启用取消性。
  • 如果一个线程已经启用了取消性,那么它的可取消类型(cancelabilty type)决定了何时取消发生。

cancelability type

  • 一个线程的可取消类型(cancelabilty type),可能是异步的(asynchronous)或延期的(deferred)(新线程默认为deferred)。
  • 异步取消性意味着:线程可以在任何时刻取消(通常是立刻,但是系统不保证是这样)。
  • 延期取消性意味着:取消将会推迟发生,直到下一次调用一个函数——这个函数得是一个取消点(cancellation point)。
  • 哪些函数可用作为取消点?这在pthreads(7)提供了一份函数列表。

当对一个取消请求执行操作时,下面的步骤会发生(按顺序的):

  1. 取消清理程序(cancellation clean-up handlers)出栈(按照它们被入栈的相反顺序)并被调用。(参见pthread_cleanup_push(3)
  2. 线程特定的数据析构函数被调用——按照未指定的顺序。(参见pthread_key_create(3)
  3. 线程终止。(参见pthread_exit(3)

对于pthread_cancel()上面的是异步发生的;pthread_cancel()的返回状态仅仅通知调用者:取消请求是否成功进入了取消队列。

在一个被取消的线程终结后,使用pthread_join(3)连接线程会获取PTHREAD_CANCELED作为这个线程的退出状态(连接线程是唯一可以知道取消已经完成了的途径)。

RETURN VALUE

成功返回0,失败返回非0;

ERRORS

ESRCH 找不到所给线程ID对应的线程。

ATTRIBUTES

有关本节使用的属于,参见attributes(7)

接口属性
pthread_cancel()线程安全性线程安全

CONFORMING TO

POSIX.1-2001, POSIX.1-2008.

NOTES

在Linux上,取消是通过信号来实现的。在NPTL线程实现中,第一个实时信号(即信号 32)用于这个目的。在Linux线程中,如果实时信号可用,那么第二个实时信号被使用,否则会使用SIGUSR2

EXAMPLES

下面的程序创建一个线程,然后取消它。主线程连接这个取消的来显来检查它的退出状态——应为PTHREAD_CANCELED。下面的shell会话显示了这个程序运行结果:

$ ./a.out
thread_func(): started; cancellation disabled
main(): sending cancellation request
thread_func(): about to enable cancellation
main(): thread was canceled
#include 
#include 
#include 
#include 
#include #define handle_error_en(en, msg) \do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)static void *
thread_func(void *ignored_argument)
{int s;/* Disable cancellation for a while, so that we don'timmediately react to a cancellation request */s = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);if (s != 0)handle_error_en(s, "pthread_setcancelstate");printf("thread_func(): started; cancellation disabled\n");sleep(5);printf("thread_func(): about to enable cancellation\n");s = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);if (s != 0)handle_error_en(s, "pthread_setcancelstate");/* sleep() is a cancellation point */sleep(1000);        /* Should get canceled while we sleep *//* Should never get here */printf("thread_func(): not canceled!\n");return NULL;
}int
main(void)
{pthread_t thr;void *res;int s;/* Start a thread and then send it a cancellation request */s = pthread_create(&thr, NULL, &thread_func, NULL);if (s != 0)handle_error_en(s, "pthread_create");sleep(2);           /* Give thread a chance to get started */printf("main(): sending cancellation request\n");s = pthread_cancel(thr);if (s != 0)handle_error_en(s, "pthread_cancel");/* Join with thread to see what its exit status was */s = pthread_join(thr, &res);if (s != 0)handle_error_en(s, "pthread_join");if (res == PTHREAD_CANCELED)printf("main(): thread was canceled\n");elseprintf("main(): thread wasn't canceled (shouldn't happen!)\n");exit(EXIT_SUCCESS);
}

SEE ALSO

pthread_cleanup_push(3), pthread_create(3), pthread_exit(3),
pthread_join(3), pthread_key_create(3), pthread_setcancelstate(3),
pthread_setcanceltype(3), pthread_testcancel(3), pthreads(7)

COLOPHON

此页面是 Linux man-pages project 5.10 的一部分。一个项目描述、关于报告错误的信息以及最新的此页面的版本,可以在https://www.kernel.org/doc/man-pages/找到。

相关内容

热门资讯

朝阳无限社区邻里节暖心启幕 转自:劳动午报 近日,朝阳区八里庄街道朝阳无限社区举办“爱满无限 睦邻同心 共筑美好”主题邻里节,通...
马来西亚18岁中国留学生绑架案... 5月13日,两名中国留学生在马来西亚伪造绑架,骗取父母500万元赎金,被警方逮捕。5月14日,曾协助...
健康证不“健康” 不是小事 转自:劳动午报 我们日常生活中接触到的厨师、外卖配送员、护工、月嫂等从业人员,每年都至少要进行一次相...
市总工会公益普法活动走进市公园... 转自:劳动午报 本报讯(记者 余翠平)2025年5月是第五个“民法典宣传月”,为落实北京市总工会“八...
普京:准备欢迎西方公司回归 据俄罗斯媒体13日报道,俄罗斯总统普京当天表示,只要符合俄罗斯的经济利益,俄罗斯准备欢迎在俄乌冲突升...
山东“救人缺考”学生将全力准备... 转自:千龙网5月14日下午,山东省教育招生考试院发布公告称,经报请上级主管部门同意,将按程序启用春季...
我市实施排水管网建设改造攻坚行... 5月14日,在第34个全国城市节水宣传周到来之际,市住建委发布消息,今年我市大力实施排水管网建设改造...
黄金突然跳水!跌破3180美元 黄金突然再跳水!5月14日晚,现货黄金跌势不止,向下跌破3180美元/盎司,创4月15日以来的新低。...
“四举措”做好环境秩序执法保障... 转自:劳动午报 近日,门头沟区城市管理综合行政执法局强化重点保障地区占道经营、生活垃圾分类、非法小广...
15项举措支持加快构建科技金融... 转自:劳动午报 新华社电 创新之花离不开金融活水的浇灌。科技部、中国人民银行等7部门近日联合发布《加...
北京公交集团6位劳模工匠讲述成... 转自:劳动午报 本报讯 (记者 盛丽)近日,北京公交集团公司工会举办了“中国梦·劳动美——风华百年 ...
向佐分享与郭碧婷婚后幸福秘诀:... 近日,向佐接受采访,向佐郭碧婷2019年结婚至今已有6年,谈到老婆和孩子,向佐脸上露出了笑容,那是他...
城市表情|大风吹 转自:千龙网时间:5月14日地点:北京前门场景:一位小朋友的伞被大风吹起。新京报记者 薛珺 摄
上市券商分红总额攀新高释放行业...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 转自:证券日报   ...
自由现金流策略受关注 公募机构...   首批中证全指自由现金流ETF陆续上市。5月13日,招商基金管理有限公司、工银瑞信基金管理有限公司...
05月15日 新西兰元兑美元跌... Hehson外汇消息2025年05月15日,截至00时41分,外汇市场上新西兰元兑美元汇率跌破1新西...
七部门联合发布15项科技金融政... 转自:证券日报    本报记者 郭冀川    5月14日,科技部、中国人民银行、国家金融监督管理总局...
修旧利废助力降本增效 转自:劳动午报 今年以来,晋能控股煤业集团塔山煤矿公司本着“修旧利废、变废为宝、节支降耗”的原则,倡...
全球封禁华为昇腾 百万AI芯片... 5月13日,马斯克在沙特出席论坛活动。 5月13日,美国商务部正式发布文件,启动撤销拜登签署的《AI...
中关村科技园区朝阳园青年职工开... 转自:劳动午报 本报讯 (记者 刘欣欣) 近日,中关村科技园区朝阳园总工会、中关村朝阳园“数链先锋”...