pthread_cancel

Autres langues

Langue: ja

Autres versions - même langue

Version: LinuxThreads (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

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_cancel ¤Ï thread °ú¿ô¤Ç»ØÄꤵ¤ì¤¿¥¹¥ì¥Ã¥É¤ËÂФ·¤Æ¡¢¼è¤ê¾Ã¤·Í×µá¤òÁ÷¤ë¡£

pthread_setcancelstate ¤Ï¡¢¤³¤ì¤ò¸Æ¤Ó½Ð¤¹¥¹¥ì¥Ã¥É¤Î¼è¤ê¾Ã¤·¾õÂÖ¤òÊѹ¹¤¹¤ë¡£ ¤¹¤Ê¤ï¤Á¡¢¼è¤ê¾Ã¤·Í×µá¤ò¼õ¤±Æþ¤ì¤ë¤«Èݤ«¤òÊѹ¹¤¹¤ë¡£ state °ú¿ô¤Ï¿·¤¿¤Ê¼è¤ê¾Ã¤·¾õÂ֤Ǥ¢¤ë¡£¤³¤ì¤Ï¼è¤ê¾Ã¤·¤ò²Äǽ¤Ë¤¹¤ë PTHREAD_CANCEL_ENABLE ¤â¤·¤¯¤Ï¡¢¼è¤ê¾Ã¤·¤òÉÔ²Äǽ¤Ë¤¹¤ë(¼è¤ê¾Ã¤·Í×µá¤ò̵»ë¤¹¤ë) PTHREAD_CANCEL_DISABLE ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£ oldstate ¤¬ NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢°ÊÁ°¤Î¼è¤ê¾Ã¤·¾õÂÖ¤¬ oldstate ¤¬»Ø¤¹¾ì½ê¤Ë³ÊǼ¤µ¤ì¡¢½¾¤Ã¤Æ¡¢¸å¤ÇÊ̤Πpthread_setcancelstate ¤Î¸Æ¤Ó½Ð¤·¤Ë¤è¤ê¡¢²óÉü¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

pthread_setcanceltype ¤Ï¡¢¤³¤ì¤ò¸Æ¤Ó½Ð¤¹¥¹¥ì¥Ã¥É¤Î¼è¤ê¾Ã¤·Í×µá¤ËÂФ¹¤ëÈ¿±þ¤Î·¿¤òÊѹ¹¤¹¤ë¡£ ¤³¤ì¤Ï¡¢ÈóƱ´ü(¨»þ)¤Þ¤¿¤ÏÃÙ±ä¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£ type °ú¿ô¤Ï¡¢¿·¤¿¤Ê¼è¤ê¾Ã¤·Êý¤Ç¤¢¤ê¡¢¼è¤ê¾Ã¤·Í׵᤬ÆϤ¯¤Èľ¤Á¤Ë¸Æ¤Ó½Ð¤· ¥¹¥ì¥Ã¥É¤ò¼è¤ê¾Ã¤¹ PTHREAD_CANCEL_ASYNCHRONOUS ¤«¡¢¼è¤ê¾Ã¤·Í×µá¤ò¼¡¤Î¼è¤ê¾Ã¤·¥Ý¥¤¥ó¥È¤Þ¤ÇαÊݤ¹¤ë PTHREAD_CANCEL_DEFERRED ¤«¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£ oldtype ¤¬ NULL ¤Ç¤Ê¤±¤ì¤Ð¡¢°ÊÁ°¤Î¼è¤ê¾Ã¤··¿¤¬ 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_cancel¡¢ pthread_setcancelstate ¤ª¤è¤Ó pthread_setcanceltype ¤ÏÀ®¸ù¤¹¤ë¤È 0 ¤òÊÖ¤·¡¢¥¨¥é¡¼¤Ê¤é¤Ð¡¢Èó¥¼¥í¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÖ¤¹¡£

¥¨¥é¡¼

pthread_cancel ¤Ï¥¨¥é¡¼¤ÎºÝ¤Ë¼¡¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÖ¤¹:
ESRCH
thread ¤Ç»ØÄꤵ¤ì¤¿¤â¤Î¤ËÂбþ¤¹¤ë¥¹¥ì¥Ã¥É¤¬Â¸ºß¤·¤Ê¤¤¡£ ID.

pthread_setcancelstate ¤Ï¥¨¥é¡¼¤ÎºÝ¤Ë¼¡¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÖ¤¹:

EINVAL
state ¤¬ PTHREAD_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() ¤Ê¤É¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤â ¼è¤ê¾Ã¤·¥Ý¥¤¥ó¥È¤Ë¤Ê¤ë¾ì¹ç¤¬¤¢¤ë¡£