1

pthread_cancel に関連する 1 つの問題に直面しています。以下のコードを参照してください。

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

1 に答える 1

4

pthread_setcancelstate呼び出しスレッド、つまりあなたの場合のメインスレッドのキャンセル可能タイプを設定します。したがって、新しく作成されたスレッドをキャンセル不可にしたい場合は、そのスレッドのコンテキスト内からその関数を呼び出す必要があります。

man 3 pthread_setcancelstate を参照してください

Linux の pthreads 実装では NULLoldstateポインターが許可されていますが、POSIX ではそれが指定されていないためoldsate .

于 2012-10-23T14:26:59.737 に答える