pthreads

Autres langues

Langue: ja

Version: 2005-06-07 (openSuse - 09/10/07)

Section: 7 (Divers)

̾Á°

pthreads - POSIX ¥¹¥ì¥Ã¥É

ÀâÌÀ

POSIX.1 ¤Ï¡¢°ìÈÌ¤Ë POSIX ¥¹¥ì¥Ã¥É¤ä Pthreads ¤È¤·¤ÆÃΤé¤ì¤ë ¥¹¥ì¥Ã¥É¡¦¥×¥í¥°¥é¥ß¥ó¥°¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹·² (´Ø¿ô¡¢¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë) ¤òµ¬Äꤷ¤Æ¤¤¤ë¡£°ì¤Ä¤Î¥×¥í¥»¥¹¤ÏÊ£¿ô¤Î¥¹¥ì¥Ã¥É¤ò»ý¤Ä¤³¤È¤¬¤Ç¤­¡¢ Á´¤Æ¤Î¥¹¥ì¥Ã¥É¤ÏƱ¤¸¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¡£ ¤³¤ì¤é¤Î¥¹¥ì¥Ã¥É¤ÏƱ¤¸Âç°è¥á¥â¥ê (¥Ç¡¼¥¿¤È¥Ò¡¼¥×Îΰè) ¤ò¶¦Í­¤¹¤ë¤¬¡¢ ³Æ¥¹¥ì¥Ã¥É¤Ï¼«Ê¬ÀìÍѤΥ¹¥¿¥Ã¥¯ (¼«Æ°ÊÑ¿ô) ¤ò»ý¤Ä¡£

POSIX.1 ¤Ï¥¹¥ì¥Ã¥É´Ö¤Ç¤É¤Î¤è¤¦¤Ê°À­¤ò¶¦Í­¤¹¤ë¤«¤Ë¤Ä¤¤¤Æ¤âÄê¤á¤Æ¤¤¤ë (¤Ä¤Þ¤ê¡¢¤³¤ì¤é¤Î°À­¤Ï¥¹¥ì¥Ã¥Éñ°Ì¤Ç¤Ï¤Ê¤¯¥×¥í¥»¥¹Á´ÂΤǶ¦Ä̤Ǥ¢¤ë):

-
¥×¥í¥»¥¹ ID
-
¿Æ¥×¥í¥»¥¹ ID
-
¥×¥í¥»¥¹¥°¥ë¡¼¥× ID ¤È¥»¥Ã¥·¥ç¥ó ID
-
À©¸æüËö
-
¥æ¡¼¥¶ ID ¤È¥°¥ë¡¼¥× ID
-
¥ª¡¼¥×¥ó¤¹¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
-
¥ì¥³¡¼¥É¤Î¥í¥Ã¥¯ (fcntl(3) »²¾È)
-
¥·¥°¥Ê¥ë¤ÎÇÛÃÖ
-
¥Õ¥¡¥¤¥ë¥â¡¼¥ÉºîÀ®¥Þ¥¹¥¯ (umask(2))
-
¥«¥ì¥ó¥È¡¦¥Ç¥£¥ì¥¯¥È¥ê (chdir(2)) ¤È¥ë¡¼¥È¡¦¥Ç¥£¥ì¥¯¥È¥ê (chroot(2))
-
¥¤¥ó¥¿¡¼¥Ð¥ë¡¦¥¿¥¤¥Þ (setitimer(2)) ¤È POSIX ¥¿¥¤¥Þ (timer_create(3))
-
nice ÃÍ (setpriority(2))
-
¥ê¥½¡¼¥¹À©¸Â (setrlimit(2))
-
CPU »þ´Ö (times(2)) ¤È¥ê¥½¡¼¥¹ (getrusage(2)) ¤Î¾ÃÈñ¾õ¶·¤Î·×¬

¥¹¥¿¥Ã¥¯¤Ë¤Ä¤¤¤Æ¤â¡¢POSIX.1 ¤Ï¤É¤Î¤è¤¦¤Ê°À­¤¬ ¸Ä¡¹¤Î¥¹¥ì¥Ã¥É¤ÇÆÈΩ¤Ë´ÉÍý¤µ¤ì¤ë¤«¤òµ¬Äꤷ¤Æ¤¤¤ë:

-
¥¹¥ì¥Ã¥É ID pthread_t ¥Ç¡¼¥¿·¿)
-
¥·¥°¥Ê¥ë¥Þ¥¹¥¯ (pthread_sigmask(3))
-
errno ÊÑ¿ô
-
ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯ (sigaltstack(2))
-
¥ê¥¢¥ë¥¿¥¤¥à¡¦¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤Î¥Ý¥ê¥·¡¼¤ÈÍ¥ÀèÅÙ (sched_setscheduler(2) ¤È sched_setparam(2))

°Ê²¼¤Î Linux ÆÃÍ­¤Îµ¡Ç½¤â¥¹¥ì¥Ã¥Éñ°Ì¤Ç¤¢¤ë:

-
¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£ (capabilities(7) »²¾È)
-
CPU affinity (¿ÆÏÂÅÙ) (sched_setaffinity(2))

Linux ¤Ç¤Î¥³¥ó¥Ñ¥¤¥ë

Linux ¤Ç¤Ï¡¢Pthreads API ¤òÍѤ¤¤¿¥×¥í¥°¥é¥à¤Ï cc -pthread ¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤Ù¤­¤Ç¤¢¤ë¡£

POSIX ¥¹¥ì¥Ã¥É¤Î Linux ¤Ç¤Î¼ÂÁõ

¤³¤ì¤Þ¤Ç¡¢2¤Ä¤Î¥¹¥ì¥Ã¥É¤Î¼ÂÁõ¤¬ Linux ¤Î GNU C ¥é¥¤¥Ö¥é¥ê¤Ë¤è¤ê Ä󶡤µ¤ì¤Æ¤­¤¿¡£
-
LinuxThreads ºÇ½é¤Î (º£¤Ï»þÂåÃÙ¤ì¤Ë¤Ê¤Ã¤¿) Pthreads ¤Î¼ÂÁõ¡£
-
NPTL (Native POSIX Threads Library) ¿·¤·¤¤ Pthreads ¤Î¼ÂÁõ¡£LinuxThreads ¤ÈÈæ¤Ù¤ë¤È¡¢ NPTL ¤Ï POSIX.1 ¤ÎÍ×µá»ÅÍͤؤνàµò¤ÎÅٹ礤¤¬¹â¤¯¡¢ ¿¿ô¤Î¥¹¥ì¥Ã¥É¤òºîÀ®¤·¤¿ºÝ¤ÎÀ­Ç½¤â¹â¤¤¡£ NPTL ¤Ï Linux 2.6 ¥«¡¼¥Í¥ë¤Ë¼ÂÁõ¤µ¤ì¤Æ¤¤¤ëµ¡Ç½¤òɬÍפȤ¹¤ë¡£

¤É¤Á¤é¤Î¼ÂÁõ¤â¤¤¤ï¤æ¤ë 1:1 ¼ÂÁõ¡¢¤¹¤Ê¤ï¤Á¸Ä¡¹¤Î¥¹¥ì¥Ã¥É¤¬ ¥«¡¼¥Í¥ë¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¼ÂÂΤ˥ޥåԥ󥰤µ¤ì¤ë¡£

¤É¤Á¤é¤Î¥¹¥ì¥Ã¥É¤Î¼ÂÁõ¤â Linux ¤Î clone(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤òÍøÍѤ·¤Æ¤¤¤ë¡£ NPTL ¤Ç¤Ï¡¢¥¹¥ì¥Ã¥ÉƱ´ü¤Î´ðËܵ¡¹½ (mutex ¤ä ¥¹¥ì¥Ã¥É¤Î join Åù) ¤Ï Linux ¤Î futex(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤Ã¤Æ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£

¿·¤·¤¤ GNU C ¥é¥¤¥Ö¥é¥ê¤Ï LinuxThreads ¤È NPTL ¤ÎξÊý¤òÄ󶡤·¤Æ¤ª¤ê¡¢ (¥«¡¼¥Í¥ë¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ì¤Ð) NPTL ¤¬¥Ç¥Õ¥©¥ë¥È¤È¤Ê¤ë¡£

LinuxThreads

¤³¤Î¼ÂÁõ¤ÎÂ礭¤ÊÆÃħ¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë:
-
¥á¥¤¥ó¥¹¥ì¥Ã¥É (ºÇ½é¤Î¥¹¥ì¥Ã¥É) ¤È¥×¥í¥°¥é¥à¤¬ pthread_create(3) ¤ò»È¤Ã¤ÆºîÀ®¤·¤¿¥¹¥ì¥Ã¥É¤Ë²Ã¤¨¡¢ ¤³¤Î¼ÂÁõ¤Ç¤Ï¡Ö´ÉÍý (manager)¡×¥¹¥ì¥Ã¥É¤¬ºîÀ®¤µ¤ì¤ë¡£ ´ÉÍý¥¹¥ì¥Ã¥É¤Ï¥¹¥ì¥Ã¥É¤ÎºîÀ®¤È½ªÎ»¤ò¼è¤ê°·¤¦ (¤³¤Î¥¹¥ì¥Ã¥É¤¬¤¦¤Ã¤«¤ê kill ¤µ¤ì¤ë¤È¡¢ÌäÂ꤬µ¯¤³¤ë¤³¤È¤¬¤¢¤ë)¡£
-
¤³¤Î¼ÂÁõ¤Ç¤ÏÆâÉô¤Ç¥·¥°¥Ê¥ë¤ò»ÈÍѤ·¤Æ¤¤¤ë¡£ Linux 2.2 °Ê¹ß¤Ç¤Ï¡¢¥ê¥¢¥ë¥¿¥¤¥à¥·¥°¥Ê¥ë¤Î¤¦¤ÁºÇ½é¤Î 3¤Ä¤¬»È¤ï¤ì¤ë¡£ ¤½¤ì°ÊÁ°¤Î¥«¡¼¥Í¥ë¤Ç¤Ï SIGUSR1 ¤È SIGUSR2 ¤¬»È¤ï¤ì¤ë¡£ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¥¹¥ì¥Ã¥É¼ÂÁõ¤ÇÍøÍѤµ¤ì¤Æ¤¤¤ë¥·¥°¥Ê¥ë¤ò ¤É¤ì¤â»È¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-
¥¹¥ì¥Ã¥É´Ö¤Ç¥×¥í¥»¥¹ ID ¤ò¶¦Í­¤·¤Ê¤¤ (¼ÂºÝ¤Ë¤Ï LinuxThreads ¤Î¥¹¥ì¥Ã¥É¤ÏÄ̾ï¤è¤ê¤Ï¾ðÊó¤ò¶¦Í­¤¹¤ë¥×¥í¥»¥¹¤È¤·¤Æ ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤¬¡¢°ì¤Ä¤Î¶¦ÄÌ¤Î¥×¥í¥»¥¹ ID ¤ò¶¦Í­¤·¤Æ¤Ï¤¤¤Ê¤¤)¡£ (´ÉÍý¥¹¥ì¥Ã¥É¤ò´Þ¤à) LinuxThreads ¥¹¥ì¥Ã¥É¤Ï ps(1) ¤ò»È¤¦¤ÈÊÌ¤Î¥×¥í¥»¥¹¤Î¤è¤¦¤Ë¸«¤¨¤ë¡£

LinuxThreads ¤Î¼ÂÁõ¤Ç¤Ï POSIX.1 »ÅÍͤ«¤é°ï椷¤Æ¤¤¤ëÅÀ¤¬ ¤¤¤¯¤Ä¤«¤¢¤ë¡£°Ê²¼¤Ë¼¨¤¹¤è¤¦¤ÊÅÀ¤¬¤¢¤ë:

-
getpid(2) ¤ò¸Æ¤Ó½Ð¤·¤¿¤È¤­¤Ë¡¢¥¹¥ì¥Ã¥ÉËè¤Ë°Û¤Ê¤ëÃͤ¬ÊÖ¤µ¤ì¤ë¡£
-
¥á¥¤¥ó¥¹¥ì¥Ã¥É°Ê³°¤Î¥¹¥ì¥Ã¥É¤Ç getppid(2) ¤ò¸Æ¤Ó½Ð¤¹¤È¡¢´ÉÍý¥¹¥ì¥Ã¥É¤Î¥×¥í¥»¥¹ ID ¤¬ÊÖ¤µ¤ì¤ë¡£ ËÜÅö¤Ï¡¢¤³¤ì¤é¤Î¥¹¥ì¥Ã¥É¤Ç getppid(2) ¤ò¸Æ¤ó¤À¾ì¹ç¤Ë¤Ï¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¤Î getppid(2) ¤ÈƱ¤¸Ãͤ¬ÊÖ¤ë¤Ù¤­¤Ç¤¢¤ë¡£
-
¤¢¤ë¥¹¥ì¥Ã¥É¤¬ fork(2) ¤ò»È¤Ã¤Æ¿·¤·¤¤»Ò¥×¥í¥»¥¹¤òºîÀ®¤·¤¿¾ì¹ç¡¢ ¤É¤Î¥¹¥ì¥Ã¥É¤Ç¤â¤³¤Î»Ò¥×¥í¥»¥¹¤ò wait(2) ¤Ç¤­¤ë¤Ù¤­¤Ç¤¢¤ë¡£¤·¤«¤·¤Ê¤¬¤é¡¢¤³¤Î¼ÂÁõ¤Ç¤Ï»Ò¥×¥í¥»¥¹¤òºîÀ®¤·¤¿ ¥¹¥ì¥Ã¥É¤À¤±¤¬¤³¤Î»Ò¥×¥í¥»¥¹¤ò wait(2) ¤Ç¤­¤ë¡£
-
¤¢¤ë¥¹¥ì¥Ã¥É¤¬ execve(2) ¤ò¸Æ¤Ó½Ð¤·¤¿¾ì¹ç¡¢Â¾¤Î¥¹¥ì¥Ã¥É¤ÏÁ´¤Æ½ªÎ»¤µ¤ì¤ë (POSIX.1 ¤Î»ÅÍÍÄ̤ê)¡£ ¤·¤«¤·¤Ê¤¬¤é¡¢¿·¤·¤¤¥×¥í¥»¥¹¤Ï execve(2) ¤ò¸Æ¤ó¤À¥¹¥ì¥Ã¥É¤ÈƱ¤¸ PID ¤ò»ý¤Ä¡£Àµ¤·¤¯¤Ï ¥á¥¤¥ó¥¹¥ì¥Ã¥É¤ÈƱ¤¸ PID ¤ò»ý¤Ä¤Ù¤­¤Ç¤¢¤ë¡£
-
¥¹¥ì¥Ã¥É´Ö¤Ç¥æ¡¼¥¶ ID ¤È¥°¥ë¡¼¥× ID ¤¬¶¦Í­¤µ¤ì¤Ê¤¤ ¤³¤Î¤³¤È¤Ï¡¢set-user-ID ¥×¥í¥°¥é¥à¤ÇÌÌÅݤʻöÂÖ¤ò¾·¤¤¤¿¤ê¡¢ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬ seteuid(2) ¤Ê¤É¤ò»È¤Ã¤Æ¿®ÍѾðÊó (credentials) ¤òÊѹ¹¤·¤¿¾ì¹ç¤Ë Pthreads ´Ø¿ô¤¬¼ºÇÔ¤¹¤ë¸¶°ø¤È¤Ê¤ë¡£
-
¥¹¥ì¥Ã¥É´Ö¤Ç¶¦Ä̤Υ»¥Ã¥·¥ç¥ó ID ¤ä¥×¥í¥»¥¹¥°¥ë¡¼¥× ID ¤ò¶¦Í­¤·¤Ê¤¤¡£
-
¥¹¥ì¥Ã¥É´Ö¤Ç fcntl(2) ¤ò»È¤Ã¤ÆºîÀ®¤µ¤ì¤ë¥ì¥³¡¼¥É¡¦¥í¥Ã¥¯¤ò¶¦Í­¤·¤Ê¤¤¡£
-
times(2) ¤È getrusage(2) ¤¬ÊÖ¤¹¾ðÊó¤¬¥×¥í¥»¥¹Á´ÂΤξðÊó¤Ç¤Ê¤¯¥¹¥ì¥Ã¥Éñ°Ì¤Î¾ðÊó¤Ç¤¢¤ë¡£
-
¥¹¥ì¥Ã¥É´Ö¤Ç¥»¥Þ¥Õ¥©¤Î¥¢¥ó¥É¥¥ÃÍ (semop(2) »²¾È) ¤ò¶¦Í­¤·¤Ê¤¤¡£
-
¥¹¥ì¥Ã¥É´Ö¤Ç¥¤¥ó¥¿¡¼¥Ð¥ë¡¦¥¿¥¤¥Þ¤ò¶¦Í­¤·¤Ê¤¤¡£
-
¥¹¥ì¥Ã¥É¤Ï¶¦Ä̤Πnice Ãͤò¶¦Í­¤·¤Ê¤¤¡£
-
POSXI.1 ¤Ç¤Ï¡¢Á´ÂΤȤ·¤Æ¤Î¥×¥í¥»¥¹¤ËÁ÷¤é¤ì¤ë¥·¥°¥Ê¥ë¤È¡¢ ¸ÄÊ̤Υ¹¥ì¥Ã¥É¤ËÁ÷¤é¤ì¤ë¥·¥°¥Ê¥ë¤ò¶èÊ̤·¤Æ¹Í¤¨¤Æ¤¤¤ë¡£ POSIX.1 ¤Ë¤è¤ë¤È¡¢¥×¥í¥»¥¹¤ËÁ÷¤é¤ì¤¿¥·¥°¥Ê¥ë (Î㤨¤Ð kill(2) ¤ò»È¤Ã¤ÆÁ÷¤ë) ¤Ï¡¢¤½¤Î¥×¥í¥»¥¹¤Ë°¤¹¥¹¥ì¥Ã¥É¤Î¤¦¤Á ¾¡¼ê¤Ë (arbitrarily) ¤ËÁªÂò¤µ¤ì¤¿°ì¤Ä¤Î¥¹¥ì¥Ã¥É¤Ë¤è¤ê½èÍý¤µ¤ì¤ë ¤³¤È¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£LinuxThreads ¤Ï¥×¥í¥»¥¹¤ËÁ÷¤é¤ì¤ë¥·¥°¥Ê¥ë¤Î ³µÇ°¤ËÂбþ¤·¤Æ¤ª¤é¤º¡¢¥·¥°¥Ê¥ë¤ÏÆÃÄê¤Î¥¹¥ì¥Ã¥É¤Ë¤À¤±Á÷¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-
¥¹¥ì¥Ã¥É¤Ï¤½¤ì¤¾¤ì¤ÎÆȼ«¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ÎÀßÄê¤ò»ý¤Ä¡£ ¤·¤«¤·¡¢¿·¤·¤¤¥¹¥ì¥Ã¥É¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ÎÀßÄê¤Ï ¤½¤Î¥¹¥ì¥Ã¥É¤òºîÀ®¤·¤¿¥¹¥ì¥Ã¥É¤«¤é¥³¥Ô¡¼¤µ¤ì¡¢¤½¤Î¤¿¤á ¥¹¥ì¥Ã¥É¤ÏºÇ½é¤Ï°ì¤Ä¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò¶¦Í­¤¹¤ë¡£ (»ÅÍͤǤϡ¢¿·¤·¤¤¥¹¥ì¥Ã¥É¤ÏÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾õÂÖ ¤Ç³«»Ï¤µ¤ì¤ë¤Ù¤­¤È¤µ¤ì¤Æ¤¤¤ë¡£ 2¤Ä¤Î¥¹¥ì¥Ã¥É¤¬¶¦Í­¤µ¤ì¤Æ¤¤¤ëÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¾å¤ÇƱ»þ¤Ë ¥·¥°¥Ê¥ë¤Î½èÍý¤ò¹Ô¤Ã¤¿¾ì¹ç¡¢Í½Â¬ÉÔ²Äǽ¤Ê¥×¥í¥°¥é¥à¤Î¥¨¥é¡¼¤¬ µ¯¤³¤êÆÀ¤ë¡£)

NPTL

NPTL ¤Ç¤Ï¡¢°ì¤Ä¤Î¥×¥í¥»¥¹¤ÎÁ´¤Æ¤Î¥¹¥ì¥Ã¥É¤ÏƱ¤¸¥¹¥ì¥Ã¥É¡¦¥°¥ë¡¼¥× ¤Ë°¤¹¤ë; ¥¹¥ì¥Ã¥É¡¦¥°¥ë¡¼¥×¤ÎÁ´¥á¥ó¥Ð¡¼¤ÏƱ¤¸ PID ¤ò¶¦Í­¤¹¤ë¡£ NPTL ¤Ï´ÉÍý¥¹¥ì¥Ã¥É (manager thread) ¤òÍøÍѤ·¤Ê¤¤¡£ NPTL ¤ÏÆâÉô¤Ç¥ê¥¢¥ë¥¿¥¤¥à¥·¥°¥Ê¥ë¤Î¤¦¤ÁºÇ½é¤Î 2¤Ä¤ÎÈÖ¹æ¤ò»ÈÍѤ·¤Æ¤ª¤ê¡¢ ¤³¤ì¤é¤Î¥·¥°¥Ê¥ë¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï»ÈÍѤǤ­¤Ê¤¤¡£

NPTL ¤Ë¤â POSIX.1 ¤Ë½àµò¤·¤Æ¤¤¤Ê¤¤ÅÀ¤¬¤¤¤¯¤Ä¤«¤¢¤ë:

-
¥¹¥ì¥Ã¥É¤Ï¶¦Ä̤Πnice Ãͤò¶¦Í­¤·¤Ê¤¤¡£

NPTL ¤Îɸ½àÈó½àµò¤ÊÅÀ¤Î¤¦¤Á¤¤¤¯¤Ä¤«¤Ï°ÊÁ°¤Î¥«¡¼¥Í¥ë¤Ç¤Î¤ßȯÀ¸¤¹¤ë:

-
times(2) ¤È getrusage(2) ¤¬ÊÖ¤¹¾ðÊó¤¬¥×¥í¥»¥¹Á´ÂΤξðÊó¤Ç¤Ê¤¯¥¹¥ì¥Ã¥Éñ°Ì¤Î¾ðÊó¤Ç¤¢¤ë (¥«¡¼¥Í¥ë 2.6.9 ¤Ç½¤Àµ¤µ¤ì¤¿)¡£
-
¥¹¥ì¥Ã¥É´Ö¤Ç¥ê¥½¡¼¥¹À©¸Â¤ò¶¦Í­¤·¤Ê¤¤ (¥«¡¼¥Í¥ë 2.6.10 ¤Ç½¤Àµ¤µ¤ì¤¿)¡£
-
¥¹¥ì¥Ã¥É´Ö¤Ç¥¤¥ó¥¿¡¼¥Ð¥ë¡¦¥¿¥¤¥Þ¤ò¶¦Í­¤·¤Ê¤¤ (¥«¡¼¥Í¥ë 2.6.12 ¤Ç½¤Àµ¤µ¤ì¤¿)¡£
-
¥á¥¤¥ó¥¹¥ì¥Ã¥É¤À¤±¤¬ setsid(2) ¤ò»È¤Ã¤Æ¿·¤·¤¤¥»¥Ã¥·¥ç¥ó¤ò³«»Ï¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë (¥«¡¼¥Í¥ë 2.6.16 ¤Ç½¤Àµ¤µ¤ì¤¿)¡£
-
¥á¥¤¥ó¥¹¥ì¥Ã¥É¤À¤±¤¬ setpgid(2) ¤ò»È¤Ã¤Æ¤½¤Î¥×¥í¥»¥¹¤ò¥×¥í¥»¥¹¡¦¥°¥ë¡¼¥×¡¦¥ê¡¼¥À¡¼¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë (¥«¡¼¥Í¥ë 2.6.16 ¤Ç½¤Àµ¤µ¤ì¤¿)¡£
-
¥¹¥ì¥Ã¥É¤Ï¤½¤ì¤¾¤ì¤ÎÆȼ«¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ÎÀßÄê¤ò»ý¤Ä¡£ ¤·¤«¤·¡¢¿·¤·¤¤¥¹¥ì¥Ã¥É¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ÎÀßÄê¤Ï ¤½¤Î¥¹¥ì¥Ã¥É¤òºîÀ®¤·¤¿¥¹¥ì¥Ã¥É¤«¤é¥³¥Ô¡¼¤µ¤ì¡¢¤½¤Î¤¿¤á ¥¹¥ì¥Ã¥É¤ÏºÇ½é¤Ï°ì¤Ä¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò¶¦Í­¤¹¤ë (¥«¡¼¥Í¥ë 2.6.16 ¤Ç½¤Àµ¤µ¤ì¤¿)¡£

NPTL ¤Î¼ÂÁõ¤Ç¤Ï°Ê²¼¤ÎÅÀ¤Ë¤Ä¤¤¤Æ¤âÃí°Õ¤¹¤ë¤³¤È:

-
¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤Î¥ê¥½¡¼¥¹¤Î¥½¥Õ¥È¡¦¥ê¥ß¥Ã¥È (setrlimit(2) ¤Î RLIMIT_STACK ¤ÎÀâÌÀ¤ò»²¾È) ¤¬ unlimited °Ê³°¤ÎÃͤËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¥½¥Õ¥È¡¦¥ê¥ß¥Ã¥È¤ÎÃͤ¬ ¿·¤·¤¤¥¹¥ì¥Ã¥É¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤È¤Ê¤ë¡£ ÀßÄê¤òÍ­¸ú¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ëÁ°¤Ë¥ê¥ß¥Ã¥ÈÃͤò ÀßÄꤷ¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤¿¤¤¤Æ¤¤¤Ï¡¢¥·¥§¥ë¤ÎÁȤ߹þ¤ß¥³¥Þ¥ó¥É¤Î ulimit -s (C ¥·¥§¥ë¤Ç¤Ï limit stacksize) ¤ò»È¤Ã¤ÆÀßÄꤹ¤ë¡£

¥¹¥ì¥Ã¥É¼ÂÁõ¤ÎȽÄê

glibc 2.3.2 °Ê¹ß¤Ç¤Ï¡¢ getconf(1) ¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¡¢ ¥·¥¹¥Æ¥à¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥¹¥ì¥Ã¥É¼ÂÁõ¤òȽÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ °Ê²¼¤ËÎã¤ò¼¨¤¹:



bash$ getconf GNU_LIBPTHREAD_VERSION

NPTL 2.3.4

¤¾¤ì°ÊÁ°¤Î glibc ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê¥³¥Þ¥ó¥É¤Ç ¥Ç¥Õ¥©¥ë¥È¤Î¥¹¥ì¥Ã¥É¼ÂÁõ¤òȽÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£




bash$ $( ldd /bin/ls | grep libc.so | awk '{print $3}' ) | \

                egrep -i 'threads|ntpl'

        Native POSIX Threads Library by Ulrich Drepper et al

¥¹¥ì¥Ã¥É¤Î¼ÂÁõ¤ÎÁªÂò: LD_ASSUME_KERNEL

LinuxThreads ¤È NPTL ¤ÎξÊý¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à¤Ç¤Ï¡¢ LD_ASSUME_KERNEL ´Ä¶­ÊÑ¿ô¤ò»È¤¦¤³¤È¤Ç¡¢Æ°Åª¥ê¥ó¥«¤¬¥Ç¥Õ¥©¥ë¥È¤Ç ÁªÂò¤¹¤ë¥¹¥ì¥Ã¥É¼ÂÁõ¤ò¾å½ñ¤­¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ ¤³¤ÎÊÑ¿ô¤Ë¤è¤ê¡¢Æ°Åª¥ê¥ó¥«¤¬ÆÃÄê¤Î¥Ð¡¼¥¸¥ç¥ó¤Î¥«¡¼¥Í¥ë¾å¤Ç Æ°ºî¤·¤Æ¤¤¤ë¤È²¾Äꤹ¤ë¤è¤¦¤Ë»ØÄꤹ¤ë¡£ NPTL ¤¬É¬ÍפȤ¹¤ë¥µ¥Ý¡¼¥Èµ¡Ç½¤òÄ󶡤·¤Æ¤¤¤Ê¤¤¥«¡¼¥Í¥ë¥Ð¡¼¥¸¥ç¥ó¤ò »ØÄꤹ¤ë¤³¤È¤Ç¡¢¶¯À©Åª¤Ë LinuxThreads ¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë (¤³¤Î¤è¤¦¤Ê¤³¤È¤ò¤¹¤ëºÇ¤â¤¢¤ê¤½¤¦¤Ê¾ìÌ̤ϡ¢ LinuxThreads ¤Îɸ½àÈó½àµò¤Ê¿¶Éñ¤¤¤Ë°Í¸¤¹¤ë (²õ¤ì¤¿) ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó ¤òÆ°ºî¤µ¤»¤ë¾ì¹ç¤À¤í¤¦)¡£ °Ê²¼¤ËÎã¤ò¼¨¤¹:



bash$ $( LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \

                awk '{print $3}' ) | egrep -i 'threads|ntpl'

        linuxthreads-0.10 by Xavier Leroy

´ØÏ¢¹àÌÜ

clone(2), futex(2), gettid(2), futex(7), ¤ª¤è¤Ó Pthreads ¤Î³Æ¼ï¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¡¢Î㤨¤Ð: pthread_atfork(3), pthread_cleanup_push(3), pthread_cond_signal(3), pthread_cond_wait(3), pthread_create(3), pthread_detach(3), pthread_equal(3), pthread_exit(3), pthread_key_create(3), pthread_kill(3), pthread_mutex_lock(3), pthread_mutex_unlock(3), pthread_once(3), pthread_setcancelstate(3), pthread_setcanceltype(3), pthread_setspecific(3), pthread_sigmask(3), pthread_testcancel(3).