pthread_kill() と pthread_cancel() による I/O ブロック状態のスレッドの終了

pthread_kill()関数は指定したスレッドにシグナルを送信するのに対し、pthread_cancel()関数は指定したスレッドの実行停止を要求する。

pthread_kill()関数でシグナルを送信しても、I/Oブロック中のスレッドがブロック状態のため、すぐに応答できない可能性があり、I/Oブロック中のスレッドを終了する有効な手段ではないかもしれません。

これに対して、pthread_cancel() 関数は I/O ブロックされたスレッドを終了させるより適切な方法です。pthread_cancel() 関数を呼び出すと、指定されたスレッドにキャンセル要求が送信されます。このキャンセル要求を受信すると、スレッドはクリーンアップ作業を実行して終了します。I/O ブロック状態の場合、スレッドはキャンセルされ、キャンセルポイントに戻り、クリーンアップ作業を実行してから終了します。

pthread_cancel()関数はI/Oブロック中のスレッドの実行を終了させるのにより適していますが、pthread_kill()関数は即座にスレッドの実行を終了できない場合があります。

bannerAds