PTHREAD_KILL_OTHER_THREADS_NP(3) |
FreeBSD Library Functions Manual |
PTHREAD_KILL_OTHER_THREADS_NP(3) |
名前
pthread_kill_other_threads_np -呼び出しスレッドを除くすべてのスレッドを終了させる
書式
#include <pthread.h>
void pthread_kill_other_threads_np(void);
説明
pthread_kill_other_threads_np はポータブルでない LinuxThreads の拡張である。この関数は呼び出しスレッドを除く、プログラム中のすべてのスレッドを直ちに終了させる。呼び出しスレッドはそのまま実行を継続する。
pthread_kill_other_threads_np は、スレッドが
execve(2) などの
exec 関数のうちの 1 つを呼び出す直前に使われることを想定している。
他のスレッドの終了は
pthread_cancel(3) を働かせて行なわれるわけではなく、取り消し機構を完全に迂回する。すなわち、終了するスレッドの取り消し状態や取り消し型に関する現在の設定は無視され、クリーンアップハンドラも実行されない。
著者
Xavier Leroy <Xavier.Leroy@inria.fr>
関連項目
execve(2),
pthread_setcancelstate(3),
pthread_setcanceltype(3),
pthread_cancel(3).
バグ
POSIX 1003.1c 規格では、 1 つのスレッドで
exec* が成功した場合、プログラム中の他のスレッドはすべて自動的に終了されなければならないことになっている。この振る舞いは LinuxThreads ではまだ実装されていない。
exec* の前に
pthread_kill_other_threads_np を呼び出すことで、次の点を除いてだいたい同じ振る舞いを実現することができる。それは、結果として
exec* が失敗した場合でも、他のスレッドはすでに終了されているということである。