Chinaunix首页 | 论坛 | 博客
  • 博客访问: 986231
  • 博文数量: 200
  • 博客积分: 5011
  • 博客等级: 大校
  • 技术积分: 2479
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 15:07
文章分类

全部博文(200)

文章存档

2009年(12)

2008年(190)

我的朋友

分类:

2008-12-16 10:22:16

12.7 cancel options

(一)cancel type

cancel request来到时,一个threadcancel分两种type

1.运行到cancel point后才检查是否需要cancel,这种叫做:

PTHREAD_CANCEL_DEFERRED

2.不管是否运行到cancel point,都立马cancel,这种叫做:

PTHREAD_CANCEL_ASYNCHRONOUS

所谓的cancel point就是一些函数。这个在posix.1中有定义,当你调用这些函数的时候,会检查是否有cancle request,如果有就会起作用。

如果我们一直从事密集型运算,而没有调用这些函数怎么办,可以调用pthread_testcancel()函数手动检测是否受到了cancel request,如果没有,这个函数啥也不做。

void pthread_testcancel(void);

#include

 

int pthread_setcanceltype(int type, int *oldtype);

 

Returns: 0 if OK, error number on failure

 

() cancel state

一个thread还可以决定,当前是否接受cancel,即可以屏蔽cancel request一段时间,等取消屏蔽后,以前的pendingrequest才有效。这就是cancle state:

1. PTHREAD_CANCEL_ENABLE

线程当前可以接受cancle request.

2. PTHREAD_CANCEL_DISABLE

线程当前不接受cancel request,不过重新打开后会使pendingrequest重新能有效

 

#include

 

int pthread_setcancelstate(int state, int *oldstate);

 

Returns: 0 if OK, error number on failure

 

阅读(1143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~