pthread_cancel()関数の使い方のLinux向けマニュアル

Linuxにおけるpthread_cancel関数は、別のスレッドの実行をキャンセルするために使用されます。プロトタイプは以下の通りです。

#include <pthread.h>

int pthread_cancel(pthread_t thread);

pthread_cancel 関数は pthread_t 型の引数を受け取り、取り消そうとするスレッドの識別子を指定します。スレッドが正常に取り消された場合、関数は 0 を返します。エラーが発生した場合は、ゼロ以外のエラーコードを返します。

pthread_cancel関数が使用できるようにするには、pthread.hヘッダーファイルを含め、キャンセルしたいスレッド ID を渡す必要があります。次に、pthread cancel 関数の使用方法を示す簡単なサンプル プログラムを以下に示します。

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

void *thread_function(void *arg) {
    while(1) {
        printf("Thread is running...\n");
        sleep(1);
    }
    return NULL;
}

int main() {
    pthread_t thread;
    int ret;

    ret = pthread_create(&thread, NULL, thread_function, NULL);
    if (ret != 0) {
        fprintf(stderr, "Error creating thread\n");
        return 1;
    }

    sleep(5);  // 让线程运行一段时间

    ret = pthread_cancel(thread);
    if (ret != 0) {
        fprintf(stderr, "Error canceling thread\n");
        return 1;
    }

    ret = pthread_join(thread, NULL);
    if (ret != 0) {
        fprintf(stderr, "Error joining thread\n");
        return 1;
    }

    printf("Thread canceled\n");

    return 0;
}

上記の例では、まず新たなスレッドを作成し、無限ループでメッセージを出力させています。次に、メインスレッドは 5 秒間スリープし、新しいスレッドがしばらく実行されることを保証します。次に、pthread_cancel 関数を使用して新しいスレッドの実行をキャンセルします。次に、pthread_join 関数を使用して新しいスレッドの終了を待機します。

pthread_cancel 関数はスレッドの実行を即時停止するのではなく、スレッドにキャンセル要求を送信します。スレッドはこの要求を無視するか、キャンセルポイントで実行を終了することができます。従って pthread_cancel 関数を使用する際は、キャンセル要求に応答するようなスレッドコードを設計する必要があります。

bannerAds