僅當(dāng)取消操作安全時(shí)才應(yīng)取消線程。pthreads 標(biāo)準(zhǔn)指定了幾個(gè)取消點(diǎn),其中包括:
通過 pthread_testcancel 調(diào)用以編程方式建立線程取消點(diǎn)。
根據(jù)POSIX標(biāo)準(zhǔn),pthread_join()、pthread_testcancel()、pthread_cond_wait()、 pthread_cond_timedwait()、sem_wait()、sigwait()等函數(shù)以及read()、write()等會(huì)引起阻塞的系統(tǒng)調(diào)用都是Cancelation-point,而其他pthread函數(shù)都不會(huì)引起Cancelation動(dòng)作。
被 sigwait(2) 阻塞的線程。
一些標(biāo)準(zhǔn)的庫調(diào)用。通常,這些調(diào)用包括線程可基于其阻塞的函數(shù)。有關(guān)列表,請(qǐng)參見 cancellation(5) 手冊(cè)頁。
缺省情況下將啟用取消功能。有時(shí),您可能希望應(yīng)用程序禁用取消功能。如果禁用取消功能,則會(huì)導(dǎo)致延遲所有的取消請(qǐng)求,直到再次啟用取消請(qǐng)求。
有關(guān)禁用取消功能的信息,請(qǐng)參見pthread_setcancelstate 語法。
請(qǐng)使用 pthread_testcancel(3C) 為線程建立取消點(diǎn)。
void pthread_testcancel(void);
#include <pthread.h>pthread_testcancel();
當(dāng)線程取消功能處于啟用狀態(tài)且取消類型設(shè)置為延遲模式時(shí),pthread_testcancel() 函數(shù)有效。如果在取消功能處于禁用狀態(tài)下調(diào)用 pthread_testcancel(),則該函數(shù)不起作用。
請(qǐng)務(wù)必僅在線程取消操作安全的序列中插入 pthread_testcancel()。除通過 pthread_testcancel() 調(diào)用以編程方式建立的取消點(diǎn)以外,pthread 標(biāo)準(zhǔn)還指定了幾個(gè)取消點(diǎn)。有關(guān)更多詳細(xì)信息,請(qǐng)參見取消點(diǎn)。
聯(lián)系客服