2012-10-23 56 views
1

我正面臨一個與pthread_cancel相關的問題。請參閱下面的代碼:線程取消問題

void* func(void *arg) 
{ 
    while(1) 
    { 
     sleep(2); 
    } 
} 

#include<stdlib.h> 
#include <stdio.h> 
#include <pthread.h> 

int main() 
{ 
    void *status; 
    pthread_t thr_Var; 
    pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL); 
    pthread_create(&thr_Var,NULL,func,NULL); 
    pthread_cancel(thr_Var); 
    pthread_join(thr_Var,&status); 
    return 0; 
} 

我的疑問是,即使我禁用取消狀態,依然pthread_cancel可以是工作,線程得到終止。 任何幫助將不勝感激

回答

4

pthread_setcancelstate設置調用線程,即您的情況下的主線程cancelability類型。所以如果你想讓新創建的線程不可取消,你應該在該線程的上下文中調用該函數。

見人3 pthread_setcancelstate

注意,雖然Linux的並行線程實現允許一個NULL指針oldstate,POSIX,但是,並沒有具體規定,所以最好爲oldsate提供一個指針。

+0

你的意思是說我應該在線程函數func本身設置取消狀態 –

+0

是的,這是正確的。 – iabdalkader

+0

謝謝,我會試試看。 –