2012-10-23 32 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

谢谢,我会试试看。 –