Linux pthread 執行緒的取消

2022-08-30 01:33:13 字數 1626 閱讀 2546

執行緒的取消(即:執行緒的終止)

某個執行緒,可以要求指定的執行緒終止!

方法:

1. 傳送取消請求

pthread_cancel

原型:int pthread_cancel (pthread_t thread);

注意:指定的執行緒接收到這個"請求"後,不一定馬上就終止。

取決於"被取消執行緒"的 「取消請求」的使能和型別。

「取消請求」的使能

pthread_setcancelstate

原型:int pthread_setcancelstate (int state, int *oldstate);

引數:state, pthread_cancel_enable 表示允許接收「取消請求」 (預設狀態)

pthread_cancel_disable 表示禁止接收「取消請求」

oldstate, 獲取原來的取消使能狀態。

「取消請求」的型別

pthread_setcanceltype

原型:int pthread_setcanceltype (int type, int *oldtype);

引數: type,

1) pthread_cancel_asynchronous

接受到「取消請求」後,立即取消該執行緒

2)  pthread_cancel_deferred  (預設狀態)

接受到「取消請求」後,直到「任意執行緒"中執行了以下函式之一就取消該執行緒。

pthread_join

pthread_cond_wait

pthread_cond_timeout

ptrhead_testcancel

sem_wait //等待訊號量

sigwait //等待訊號

例項 main4.c

#include 

#include

#include

pthread_t mythread1;

pthread_t mythread2;

void * th1_handle(void *arg)

//ret = pthread_setcanceltype(pthread_cancel_asynchronous, null);

ret = pthread_setcanceltype(pthread_cancel_deferred, null);

if (ret != 0)

while(1)

pthread_exit(null);

}void * th2_handle(void *arg)

int main(void)

ret = pthread_create(&mythread2, null, th2_handle, null);

if (ret != 0)

pthread_join(mythread1, null);

pthread_join(mythread2, null);

//while(1);

return

0;

}

Linux pthread 執行緒 訊號

執行緒的訊號 執行緒的訊號與程序之間的關係 執行緒沒有自己獨立的訊號機制。執行緒的訊號依賴與所在的程序。執行緒有自己的 訊號遮蔽集合 使得 1 各執行緒可以向其同程序內的執行緒傳送訊號。使用pthread kill 2 各執行緒可以設定幾的 訊號遮蔽集合 其初值從建立執行緒中繼承。訊號遮蔽集合類似與...

linux pthread 基本使用

1.概述 該demo主要完成了linux下執行緒建立,以及資源 等操作,相關介面介紹可以參考 2.測試 執行緒程式設計demo 執行緒建立,以及資源 等 pthread並非linux系統的預設庫,而是posix執行緒庫 在linux中將其作為乙個庫來使用,因此加上 lpthread 或 pthrea...

多執行緒 執行緒的停止 執行緒的延遲

執行緒的停止 最好是用標誌位的轉換來停止執行緒 例 三個模組 執行緒 執行緒停止方法 主方法 主方法執行到一定條件 呼叫 執行緒停止方法 執行緒停止執行 主方法繼續執行 package lesson thread public class thread stop implements runnabl...