Provided by: manpages-ja-dev_0.5.0.0.20060115-1_all bug

NAME

       pthread_cancel,      pthread_setcancelstate,     pthread_setcanceltype,
       pthread_testcancel - スレッドの取り消し

式
       #include <pthread.h>

       int pthread_cancel(pthread_t thread);

       int pthread_setcancelstate(int state, int *oldstate);

       int pthread_setcanceltype(int type, int *oldtype);

       void pthread_testcancel(void);

明
       取り消しは、あるスレッドが他のスレッドの実行を終了させることを可能
       にするメカニズムである。より正確には、スレッドは他のスレッドに対して
       取消要求を送ることがでい襦設定次第で、目標のスレッドは、要求を無視
       したり、直ちに実現したり、ある取り消しポイントに至るまでその要求の実行
       を延期したりでい襦

       スレッドが最終的に取り消し要求を実現する際には、それはあたかも
       pthread_exit(PTHREAD_CANCELED)
       がその時点で呼び出されたかのように振舞う。すなわち、全てのクリーン
       アップハンドラが逆順に実行され、スレッド固優如璽燭僚了処理関数が
       呼び出され、最後にスレッドは、返り値                     PTHREAD_CANCEL
       で実行を停止する。詳しくは pthread_exit(3) を見よ。

       pthread_cancelthread
       引数で指定されたスレッドに対して、取り消し要求を送る。

       pthread_setcancelstate
       は、これを呼び出すスレッドの取り消し状態を変更する。
       すなわち、取り消し要求を受け入れるか否かを変更する。              state
       引数は新たな取り消し状態である。これは取り消しを可能にする
       PTHREAD_CANCEL_ENABLE
       もしくは、取り消しを不可能にする(取り消し要求を無視する)
       PTHREAD_CANCEL_DISABLE    のいずれかである。    oldstateNULL
       でなければ、以前の取り消し状態が                               oldstate
       が指す場所に格納され、従って、後で別の           pthread_setcancelstate
       の呼び出しにより、回復することがでい襦

       pthread_setcanceltype
       は、これを呼び出すスレッドの取り消し要求に対する反応の型を変更する。
       これは、非同期(即時)または遅延のいずれかである。                   type
       引数は、新たな取り消し方であり、取り消し要求が届くと直ちに呼び出し
       スレッドを取り消す                          PTHREAD_CANCEL_ASYNCHRONOUS
       か、取り消し要求を次の取り消しポイントまで留保する
       PTHREAD_CANCEL_DEFERRED    かのいずれかである。    oldtypeNULL
       でなければ、以前の取り消し型が                                  oldtype
       の指す場所に格納され、従って、後から別の          pthread_setcanceltype
       の呼び出しによって回復することが可能である。

       スレッドは常に                                        pthread_create(3)
       によって、取り消し可能かつ遅延で作成される。
       すなわち、初期の取り消し状態は PTHREAD_CANCEL_ENABLE であり、初期の型は
       PTHREAD_CANCEL_DEFERRED である。

       取り消しポイントとは、保留中の取り消し要求に対するテストが行われ、
       実際に要求があれば取り消しが実行される点である。以下の  POSIX  スレッド
       関数は取り消しポイントである:

       pthread_join(3)
       pthread_cond_wait(3)
       pthread_cond_timedwait(3)
       pthread_testcancel(3)
       sem_wait(3)
       sigwait(3)

       これ以外の全ての POSIX スレッド関数は取り消しポイントではないことが保証
       されている。すなわち、それらは遅延取り消しモードで決して取り消しを
       実現することはない。

       pthread_testcancel
       は保留中の取り消し要求を調べ、それを実現するだけである。その目的は、
       他に取り消しポイントとなる関数を呼び出すことのない、長い連続した
       コードの中に、明示的に取り消しのチェックを導入することである。

値
       pthread_cancelpthread_setcancelstate  および  pthread_setcanceltype
       は成功すると 0 を返し、エラーならば、非ゼロのエラーコードを返す。

ー
       pthread_cancel はエラーの際に次のエラーコードを返す:

              ESRCH  thread   で指定されたものに対応するスレッドが存在しない。
                     ID.

       pthread_setcancelstate はエラーの際に次のエラーコードを返す:

              EINVAL statePTHREAD_CANCEL_ENABLE         でも
                     PTHREAD_CANCEL_DISABLE でもない。

       pthread_setcanceltype はエラーの際に次のエラーコードを返す:

              EINVAL type       引数が       PTHREAD_CANCEL_DEFERRED      でも
                     PTHREAD_CANCEL_ASYNCHRONOUS でもない。

者
       Xavier Leroy <Xavier.Leroy@inria.fr>

目
       pthread_exit(3), pthread_cleanup_push(3), pthread_cleanup_pop(3).

グ
       POSIX  は一連のシステムコール(基本的には  read(2),  write(2),  wait(2),
       等のようなブロックの可能世里△訌瓦討隆愎)とそれらのシステムコール
       を呼ぶようなライブラリ関数(例えば                           fprintf(3))
       が取り消しポイントであると規定している。  LinuxThreads はこれを実装する
       には、まだ十分に C ライブラリと統合されていると言えず、  従っていかなる
       C ライブラリの関数も取り消しポイントではない。

       少なくとも、システムコールに対してはこれを回避する方法がある。
       取り消し要求は、目標スレッドにシグナルを送ることによって送信される。
       このシグナルはブロックしているシステムコール全てに対して割込みを掛け、
       それらは直ちに        EINTR         で戻る。よって、例えば         read
       システムコールを呼んでいる間に取り消しをチェックするには、次のように
       すれば良い:

              pthread_testcancel();
              retcode = read(fd, buffer, length);
              pthread_testcancel();

       [訳注]    上の欺劼    glibc2    を用いたシステムでは正しくない。以下は
       glib-2.1.2 の info ファイルからの引用である。

       取り消しポイントとは、保留中の取り消し要求に対するテストが行われ、
       実際に要求があれば取り消しが実行される点である。POSIX      スレッド関数
       のうち、`pthread_join', `pthread_cond_wait', `pthread_cond_timed_wait',
       `pthread_testcancel',  `sem_wait'  及び  `sigwait'   は取り消しポイント
       である。 これに加えて、以下のシステムコールは取り消しポイントである:

        accept                   open                     sendmsg
        close                    pause                    sendto
        connect                  read                     system
        fcntl                    recv                     tcdrain
        fsync                    recvfrom                 wait
        lseek                    recvmsg                  waitpid
        msync                    send                     write
        nanosleep

       これらの関数を呼び出す可能世里△    printf()    などのライブラリ関数も
       取り消しポイントになる場合がある。

                                 LinuxThreads                PTHREAD_CANCEL(3)