名称
pthread_cancel() ― スレッドの実行のキャンセル
構文
#include <pthread.h>
int pthread_cancel(
pthread_t
thread
);
説明
pthread_cancel() は、
thread (ここでは対象のスレッドを指しています) で指定されるスレッドをキャンセルするよう要求します。
プロセス内のどのスレッドの実行も、統一された方法で終了させることができます。
対象となるスレッドのキャンセル可能状態と形式は、キャンセルが行われた時点で決定します。
対象となるスレッドのキャンセル可能状態が PTHREAD_CANCEL_ENABLE のときだけ、キャンセルが行われます。
スレッドのキャンセル可能状態が PTHREAD_CANCEL_DISABLE の場合、キャンセル要求は保留され、キャンセルが有効になったときに実行されます。
対象スレッドのキャンセル可能形式が PTHREAD_CANCEL_ASYNCHRONOUS の場合、新規または保留キャンセル要求は、いつでも実行されます。
対象スレッドのキャンセル可能形式が PTHREAD_CANCEL_DEFERRED の場合、スレッドの実行が以下で説明するキャンセルポイントに到達するまで、キャンセル要求は保留されます。
対象スレッドのキャンセル可能状態が無効の場合、キャンセル可能形式は何でもかまいません。
対象スレッドのキャンセル可能状態が有効の場合、キャンセル可能形式も有効になります。
キャンセルが行われると、 thread
に対するキャンセルクリーンアップ ハンドラーが呼び出されます。
キャンセルクリーンアップ ハンドラーは、インストールとは逆の順序で呼び出されます。
最後のキャンセルクリーンアップ ハンドラーから戻ると、 thread 用のデータデストラクタ関数が呼び出されます。 最後のデストラクタ関数から戻ると、 thread は終了させられます。
pthread_cancel() の呼び出しは、対象となるスレッドがキャンセルされるのを待ちません。
キャンセルポイント
「キャンセルポイント 」とは、特定の関数がブロックされている場合に、キャンセルが有効になった時点で、保留中のキャンセル要求が実行される、関数内の位置をいいます。
戻り値
正常終了すると、 pthread_cancel() は、0 を返します。
それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。
エラー
以下の条件の場合、 pthread_cancel() 関数は、該当するエラー番号を返します。
| [ESRCH] | | thread に対応するスレッドが見つからない場合。 |
警告
解放する必要のあるリソースを保持したままの非同期キャンセルは、リソースを減少させます。
アプリケーションは、実行中の動作が、静的な文法上の適用範囲に従うよう注意しなければなりません。
たとえば、適用範囲の取り出し処理を行うことなく、 setjmp()、
return、goto 等を使用してユーザー定義のキャンセル適用範囲から抜け出すと、結果の動作は不定です。
著者
pthread_cancel() は、IEEE POSIX P1003.1c
標準から派生しました。
標準準拠
pthread_cancel(): POSIX 1003.1c.