线程取消

一个线程可以调用pthread_cancel来取消另一个线程。
被取消的线程需要被join来释放资源。
被取消的线程的返回值为PTHREAD_CANCELED
有关线程的取消,一个线程可以为如下三个状态:
    1) 可异步取消:一个线程可以在任何时刻被取消。
    2) 可同步取消:取消的请求被放在队列中,直到线程到达某个点,才被取消。
    3) 不可取消:取消的请求被忽略。
    4) 默认状态下,线程是可同步取消的。

调用pthread_setcanceltype来设定线程取消的方式:
pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, NULL);
pthread_setcanceltype (PTHREAD_CANCEL_DISABLE, NULL);

取消一个正在执行线程的操作。一个线程能够被取消需要满足条件
条件:
    1)该线程是否可以被其他取消是可设置的 PTHREAD_CANCEL_DISABLE  PTHREAD_CANCEL_ENABLE
    2)该线程处于可取消点才能取消
设置取消类型
extern int pthread_setcanceltype(int __type,int *__oldstate)
                                     type = PTHREAD_CANCEL_ENABLE
                                     type = PTHREAD_CANCEL_DISABLE

时间: 2024-10-29 10:46:58

线程取消的相关文章

POSIX多线程--线程取消

1.三种取消状态Off                   禁用取消Deferred           推迟取消:在下一个取消点执行取消Asynchronous   异步取消:可以随时执行取消 int pthread_cancel(pthread_t thread) 2.推迟取消:在下一个取消点执行取消 Pthreads系统上的某些函数会被作为取消点,如pthread_testcancel,sleep,pthread_cond_wait等.线程调用pthread_cancel函数后,被取消线程

(转载)Linux 线程取消(Pthread_cancel)

线程取消(pthread_cancel) 基本概念pthread_cancel调用并不等待线程终止,它只提出请求.线程在取消请求(pthread_cancel)发出后会继续运行,直到到达某个取消点(CancellationPoint).取消点是线程检查是否被取消并按照请求进行动作的一个位置. 与线程取消相关的pthread函数int pthread_cancel(pthread_t thread)发送终止信号给thread线程,如果成功则返回0,否则为非0值.发送成功并不意味着thread会终止

pthread_setcanceltype 线程取消

取消线程: (1)一个线程可以调用pthread_cancel来取消另一个线程.    (2)被取消的线程需要被join来释放资源.    (3)被取消的线程的返回值为PTHREAD_CANCELED 有关线程的取消,一个线程可以为如下三个状态:          (1)可异步取消:一个线程可以在任何时刻被取消.          (2)可同步取消:取消的请求被放在队列中,直到线程到达某个点,才被取消.         (3)不可取消:取消的请求被忽略.            默认状态下,线程是

线程取消 (pthread_cancel)

线程取消(pthread_cancel) 基本概念pthread_cancel调用并不等待线程终止,它只提出请求.线程在取消请求(pthread_cancel)发出后会继续运行,直到到达某个取消点(CancellationPoint).取消点是线程检查是否被取消并按照请求进行动作的一个位置. 与线程取消相关的pthread函数int pthread_cancel(pthread_t thread)发送终止信号给thread线程,如果成功则返回0,否则为非0值.发送成功并不意味着thread会终止

SylixOS 线程取消处理流程

概述取消一个线程要确保该线程能够释放其所持有的锁.分配的内存,使整个系统保持一致性.线程取消的途径有两种:异步取消和延时取消. 异步取消:被取消线程收到取消信号后,立即死亡.该线程缩持有的资源可能得不到释放,这是一种非安全的线程取消方式. 延时取消:系统默认取消方式,是一种比较安全的线程取消机制,被取消线程取消时,只是设置取消点(ptcbDel->TCB_bCancelRequest)为true,被取消线程继续运行,等到安全位置后进行取消操作. 取消点: 在使用延迟取消机制时,一个线程在可以被取

.net 多线程之线程取消

1 //线程取消不是操作线程,而是操作信号量(共享变量,多个线程都能访问到的东西,变量/数据库的数据/硬盘数据) 2 //每个线程在执行的过程中,经常去查看下这个信号量,然后自己结束自己 3 //线程不能别人终止,只能自己干掉自己,延迟是少不了的 4 //CancellationTokenSource可以在cancel后,取消没有启动的任务 5 CancellationTokenSource cts = new CancellationTokenSource();//bool值 6 for (i

UNIX环境编程学习笔记(28)——多线程编程(三):线程的取消

lienhua342014-11-24 1 取消线程 pthread 提供了pthread_cancel 函数用于请求取消同一进程中的其他线程. #include <pthread.h> int pthread_cancel(pthread_t tid); 返回值:若成功则返回0,否则返回错误编码 pthread_cancel 调用并不会立即终止目标线程,而只是向目标线程发出取消请求.调用线程不等待目标线程终止,在默认情况下,目标线程在取消请求发出以后还是继续运行的,直到目标线程到达某个取消点

linux线程创建、取消、属性设置

创建线程: #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg) 参数:第一个参数为指向线程标识符的指针. 第二个参数用来设置线程属性. 第三个参数是线程运行函数的起始地址. 第四个参数是线程运行函数的参数. int pthread_join(pthread_t thread, void

并发编程003 --- 线程的取消与关闭

要使线程安全.快速.可靠的停下来并非易事,java并未提供机制保证线程安全的停止,但是我们可以通过使用中断来完成线程的停止和关闭: 本章节只总结基础线程的取消和关闭,类似封装库提供的方法如Future.线程池不在本章节讨论. 1.interrupted方法 Thread提供了中断相关的方法,这里需要注意的一点是,使用静态的interrupted方法,会清除线程的中断状态. 2.利用volatile变量作为标记,实现线程的关闭,前提是当前线程调用BlockingQ的produce方法,不会进入等待