futex

Autres langues

Langue: ja

Version: 2002-12-31 (openSuse - 09/10/07)

Section: 7 (Divers)

̾Á°

futex - ¹â®¥æ¡¼¥¶¶õ´Ö¥í¥Ã¥¯µ¡¹½

½ñ¼°


#include <linux/futex.h>

ÀâÌÀ

Linux ¥«¡¼¥Í¥ë¤Ï¡¢¥æ¡¼¥¶¶õ´Ö¤Ç¹â®¤Ê¥í¥Ã¥¯µ¡¹½¤ä¥»¥Þ¥Õ¥©¤ò»ÈÍѤ¹¤ë¤¿¤á¤Î ´ðÁÃŪÍ×ÁǤȤ·¤Æ futex (`Fast Userspace muTexes'; ¹â®¥æ¡¼¥¶¶õ´Ö mutex) ¤ò Ä󶡤·¤Æ¤¤¤ë¡£ futex ¤ÏÈó¾ï¤Ë´ðËÜŪ¤Ê¤â¤Î¤Ç¡¢ POSIX mutex ¤Î¤è¤¦¤Ê¹âÅ٤ʥí¥Ã¥¯µ¡¹½¤Î³µÇ°¤ò ¹½ÃÛ¤¹¤ë¤Î¤ËÌòΩ¤Ã¤Æ¤¤¤ë¡£

¤³¤Î¥Ú¡¼¥¸¤Ï¤¹¤Ù¤Æ¤ÎÀß·×·èÄê¤òµ­½Ò¤¹¤ë¤è¤¦¤Ë¤Ï¤Ê¤Ã¤Æ¤ª¤é¤º¡¢ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ä¥é¥¤¥Ö¥é¥ê¤Î³«È¯¤Ë´Ø·¸¤¹¤ë¤³¤È¤¬¤é¤Ë¸Â¤Ã¤Æ¤¤¤ë¡£ ¼ÂºÝ¤Ë¤Ï¥×¥í¥°¥é¥Þ¤Î¿¤¯¤ÏľÀÜ¤Ï futex ¤ò°·¤ï¤Ê¤¤¤¬¡¢¤½¤ÎÂå¤ï¤ê futex ¤Ë´ð¤Å¤¤¤Æ¹½ÃÛ¤µ¤ì¤¿¥·¥¹¥Æ¥à¥é¥¤¥Ö¥é¥ê (Î㤨¤Ð NPTL ¥¹¥ì¥Ã¥É) ¤Ë °Í¸¤¹¤ë¤³¤È¤Ë¤Ê¤ë¤À¤í¤¦¡£

futex ¤Ï°Û¤Ê¤ë¥×¥í¥»¥¹´Ö¤Ç¶¦Í­¤¹¤ë¤³¤È¤Î¤Ç¤­¤ë¥á¥â¥êÊҤǼ±Ê̤µ¤ì¤ë¡£ ¤³¤ì¤é¤Î°Û¤Ê¤ë¥×¥í¥»¥¹¤Ç¤Ï¡¢Æ±¤¸¥¢¥É¥ì¥¹¤¬ÉÕÍ¿¤µ¤ì¤Æ¤¤¤ëɬÍפϤʤ¤¡£ Íç¤Î»Ñ¤Ç¤Ï futex ¤Î¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤Ï¥»¥Þ¥Õ¥©¤ÈƱ¤¸¤Ç¤¢¤ë¡£ futex ¤ÏÉÔ²ÄʬÁàºî¤Ç (atomically) ¥¤¥ó¥¯¥ê¥á¥ó¥È¤·¤¿¤ê¥Ç¥¯¥ê¥á¥ó¥È¤·¤¿¤ê¤Ç¤­¤ë ¥«¥¦¥ó¥¿¤Ç¡¢¥×¥í¥»¥¹¤ÏÃͤ¬Àµ¤Ë¤Ê¤ë¤Î¤òÂԤĤ³¤È¤¬¤Ç¤­¤ë¡£

futex ¤ÎÁàºî¤Ï¡¢¶¥¹ç¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï´°Á´¤Ë¥æ¡¼¥¶¶õ´Ö¤Ç¹Ô¤Ê¤ï¤ì¤ë¡£ ¥«¡¼¥Í¥ë¤Ï¶¥¹ç¤¬µ¯¤³¤Ã¤¿¾ì¹ç¤ÎÃçºÛ¤Ë´ØÍ¿¤¹¤ë¤À¤±¤Ç¤¢¤ë¡£ Îɼ±¤¢¤ëÀ߷פǤ϶¥¹ç¤¬µ¯¤³¤é¤Ê¤¤¤è¤¦ÅØÎϤ¹¤ë¤¬¡¢ futex ¤â¶¥¹ç¾õÂ֤˴ؤ·¤ÆºÇŬ²½¤µ¤ì¤Æ¤¤¤ë¡£

Íç¤Î»Ñ¤Ç¤Ï¡¢ futex ¤ÏÉÔ²Äʬ¤Ê¥¢¥»¥ó¥Ö¥êÌ¿Îá¤Ç¤Î¤ßÁàºî¤µ¤ì¤ë ¥¢¥é¥¤¥ó¥á¥ó¥È¤Î·¤Ã¤¿ int ·¿¤ÎÊÑ¿ô¤Ç¤¢¤ë¡£ Ê£¿ô¤Î¥×¥í¥»¥¹¤Ï¤³¤Î int ·¿ÊÑ¿ô¤ò¡¢ mmap(2) ¤òÍѤ¤¤ë¤«¡¢ ¶¦Í­¥á¥â¥ê¥»¥°¥á¥ó¥È¤ò²ð¤¹¤ë¤«¡¢ ¥á¥â¥ê¶õ´Ö¤ò¶¦Í­¤¹¤ë (¤³¤Î¾ì¹ç¡¢ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï°ìÈÌŪ¤Ë¥Þ¥ë¥Á¡¦¥¹¥ì¥Ã¥É¤Ç¤¢¤ë¤È¸Æ¤Ð¤ì¤ë) ¤«ÊýË¡¤Ç¶¦Í­¤¹¤ë¡£

¥»¥Þ¥ó¥Æ¥£¥¯¥¹

futex ¤ÎÁàºî¤Ï¤¹¤Ù¤Æ¥æ¡¼¥¶¶õ´Ö¤«¤é»Ï¤Þ¤ë¤¬¡¢É¬Íפ˱þ¤¸¤Æ futex(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤òÍѤ¤¤Æ¥«¡¼¥Í¥ë¤ÈÄÌ¿®¤¹¤ë¡£

futex ¤ò `up' ¤¹¤ë¤Ë¤Ï¡¢ ¥Û¥¹¥È CPU ¤ËÂФ· int ·¿ÊÑ¿ô¤òÉÔ²ÄʬÁàºî¤Ç¥¤¥ó¥¯¥ê¥á¥ó¥È¤¹¤ë¤è¤¦¤Ê¡¢ ŬÀڤʥ¢¥»¥ó¥Ö¥êÌ¿Îá¤ò¼Â¹Ô¤¹¤ë¡£ ¤½¤Î¤¢¤È¡¢¼ÂºÝ¤Ë 0 ¤«¤é 1 ¤ËÊѲ½¤·¤¿¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤·¡¢ ÊѲ½¤·¤Æ¤¤¤ì¤ÐÂÔ¤Á¥×¥í¥»¥¹ (waiter) ¤Ï¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¤¢¤ê¡¢Áàºî¤Ï´°Î»¤¹¤ë¡£ ¤³¤ì¤Ï¶¥¹ç¤Î¤Ê¤¤¾ì¹ç¤Ç¤¢¤ê¡¢¹â®¤Ç¤è¤¯µ¯¤³¤ë¤Ï¤º¤Ç¤¢¤ë¡£

¶¥¹ç¤¬¤¢¤ë¾ì¹ç¡¢ÉÔ²ÄʬÁàºî¤Î¥¤¥ó¥¯¥ê¥á¥ó¥È¤Ç¥«¥¦¥ó¥¿¤Ï -1 (¤Þ¤¿¤Ï¾¤ÎÉé¤Î¿ô) ¤«¤éÊѲ½¤¹¤ë¡£¤³¤ì¤¬¸¡½Ð¤µ¤ì¤ë¤È¡¢ÂÔ¤Á¥×¥í¥»¥¹¤¬¤¢¤ë¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£ ¥æ¡¼¥¶¶õ´Ö¤Ç¤Ï¥«¥¦¥ó¥¿¤ò 1 ¤ËÀßÄꤷ¡¢ FUTEX_WAKE ¤òÍѤ¤¤Æ¥«¡¼¥Í¥ë¤ËÂÔ¤Á¥×¥í¥»¥¹¤ò wake (µ¯¾²) ¤µ¤»¤ë¤è¤¦»Ø¼¨¤¹¤ë¡£

futex ¤Î³ÍÆÀ¤òÂԤġ¢¤¹¤Ê¤ï¤Á futex ¤ò `down' ¤¹¤ë¤Ë¤ÏÈ¿ÂФÎÁàºî¤ò¹Ô¤Ê¤¦¡£ ÉÔ²ÄʬÁàºî¤Ç¥«¥¦¥ó¥¿¤ò¥Ç¥¯¥ê¥á¥ó¥È¤·¡¢¥«¥¦¥ó¥¿¤¬ 0 ¤ËÊѲ½¤·¤¿¤«¤É¤¦¤«¤ò ¥Á¥§¥Ã¥¯¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ì¤ÐÁàºî¤Ï´°Î»¤· futex ¤Ï¶¥¹ç¤·¤Æ¤¤¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£ 0 ¤Ë¤Ê¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡¢¥×¥í¥»¥¹¤Ï¥«¥¦¥ó¥¿¤ò -1 ¤ËÀßÄꤷ¡¢ ¾¤Î¥×¥í¥»¥¹¤¬¤½¤Î futex ¤ò up ¤¹¤ë¤Î¤òÂԤĤ褦¥«¡¼¥Í¥ë¤ËÍ׵ᤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¤³¤ì¤Ï FUTEX_WAIT ¤ò¹Ô¤Ê¤¦¤³¤È¤Ç¼Â¸½¤µ¤ì¤ë¡£

futex(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ë¤Ï¡¢¾Êά²Äǽ¤Ê°ú¿ô¤È¤·¤Æ¥¿¥¤¥à¥¢¥¦¥È¤òÅϤ¹¤³¤È¤¬¤Ç¤­¡¢ ¥«¡¼¥Í¥ë¤Ï¤½¤Î futex ¤¬ up ¤µ¤ì¤ë¤Î¤ò¤É¤ì¤¯¤é¤¤¤Î´ü´ÖÂԤĤ٤­¤«¤ò »ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¤³¤Î¾ì¹ç¡¢¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤Ï¤â¤Ã¤ÈÊ£»¨¤Ë¤Ê¤ë¤¿¤á¡¢ ¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤òÆÀ¤ë¤Ë¤Ï¥×¥í¥°¥é¥Þ¤Ï futex(2) ¤ò»²¾È¤¹¤ë¤³¤È¡£ Ʊ¤¸¥Ú¡¼¥¸¤ËÈóƱ´ü¤Î futex ÂÔ¤Á¤Ë¤Ä¤¤¤Æ¤âµ­¤µ¤ì¤Æ¤¤¤ë¡£

¥Ð¡¼¥¸¥ç¥ó

ºÇ½é¤Î futex Âбþ¤Ï Linux 2.5.7 ¤ÇÁȤ߹þ¤Þ¤ì¤¿¤¬¡¢ ¾åµ­¤Î¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤È¤Ï°Û¤Ê¤ë¡£ ¸½ºß¤Î¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤Ï Linux 2.5.40 °Ê¹ß¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£

Ãí°Õ

ºÆ¤Ó·«¤êÊÖ¤·¤Æ¤ª¤¯¤¬¡¢Íç¤Î futex ¤Ï¥¨¥ó¥É¥æ¡¼¥¶¤¬Íưפ˻Ȥ¨¤ë³µÇ°¤È¤·¤Æ °Õ¿Þ¤µ¤ì¤¿¤â¤Î¤Ç¤Ï¤Ê¤¤¡£ ¼ÂÁõ¼Ô¤Ï¡¢¥¢¥»¥ó¥Ö¥ê¸À¸ì¤Ë´·¤ì¤Æ¤ª¤ê¡¢°Ê²¼¤Ëµó¤²¤ë futex ¥æ¡¼¥¶¶õ´Ö¥é¥¤¥Ö¥é¥ê¤Î ¥½¡¼¥¹¤òÆɤ߽ª¤¨¤Æ¤¤¤ë¤³¤È¤¬Í׵ᤵ¤ì¤ë¡£

¤³¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ë¤Ï futex(2) ¥×¥ê¥ß¥Æ¥£¥Ö¤ÎºÇ¤â°ìÈÌŪ¤Ê»ÈÍÑË¡¤¬ µ­¤µ¤ì¤Æ¤¤¤ë¡£¤³¤ì¤Ï·è¤·¤ÆÍ£°ì¤Î»ÈÍÑË¡¤Ç¤Ï¤Ê¤¤¡£

´ØÏ¢»ñÎÁ

<URL:ftp://ftp.kernel.org:/pub/linux/kernel/people/rusty/>. futex(2), `Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux' (proceedings of the Ottawa Linux Symposium 2002), futex ¤Î»ÈÍÑÎã¥é¥¤¥Ö¥é¥ê, futex-*.tar.bz2 <URL:ftp://ftp.kernel.org:/pub/linux/kernel/people/rusty/>.