【问题标题】:thread cancel issue线程取消问题
【发布时间】:2012-10-23 14:24:36
【问题描述】:

我面临一个与 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 仍在工作并且线程正在终止。 任何帮助将不胜感激

【问题讨论】:

    标签: c pthreads


    【解决方案1】:

    pthread_setcancelstate 设置调用线程的可取消类型,即您的情况下的主线程。因此,如果您想让新创建的线程不可取消,您应该在该线程的上下文中调用该函数。

    参见 man 3 pthread_setcancelstate

    注意虽然 Linux pthreads 实现允许 NULL oldstate 指针,但是 POSIX 并没有指定,因此最好为 oldsate 提供指针。

    【讨论】:

    • 你的意思是说我应该在线程函数func本身中设置取消状态
    • 不客气,如果可行,请考虑接受答案。
    猜你喜欢
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多