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 関数を使用する際は、キャンセル要求に応答するようなスレッドコードを設計する必要があります。