sem_overview

Autres langues

Langue: ja

Version: 2006-03-25 (openSuse - 09/10/07)

Section: 7 (Divers)

̾Á°

sem_overview - POSIX ¥»¥Þ¥Õ¥©¤Î³µÍ×

ÀâÌÀ

POSIX ¥»¥Þ¥Õ¥©¤ò»ÈÍѤ¹¤ë¤È¡¢¥×¥í¥»¥¹¤ä¥¹¥ì¥Ã¥É´Ö¤Ç¤½¤ÎÆ°ºî¤ò Ʊ´ü¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

¥»¥Þ¥Õ¥©¤ÏÀ°¿ô¤Ç¤¢¤ê¡¢¤½¤ÎÃͤϷ褷¤Æ 0 ̤Ëþ¤Ë¤Ê¤ë¤³¤È¤Ïµö¤µ¤ì¤Ê¤¤¡£ ¥»¥Þ¥Õ¥©¤ËÂФ·¤Æ¤Ç¤­¤ëÁàºî¤Ï 2 ¤Ä¤Ç¤¢¤ë: ¥»¥Þ¥Õ¥©Ãͤò 1 Áý¤ä¤¹ (sem_post(3)); ¥»¥Þ¥Õ¥©Ãͤò 1 ¸º¤é¤¹ (sem_wait(3))¡£ ¥»¥Þ¥Õ¥©¤ÎÃͤ¬¤¹¤Ç¤Ë 0 ¤Î¾ì¹ç¡¢¥»¥Þ¥Õ¥©Ãͤ¬ 0 ¤è¤êÂ礭¤¯¤Ê¤ë¤Þ¤Ç sem_wait(3) Áàºî¤ÏÄä»ß (block) ¤¹¤ë¡£

POSIX ¥»¥Þ¥Õ¥©¤Ë¤Ï¡¢Ì¾Á°ÉÕ¤­¥»¥Þ¥Õ¥© (named semaphore) ¤È ̾Á°¤Ê¤·¥»¥Þ¥Õ¥© (unnamed semaphore) ¤Î 2¤Ä¤Î·Á¤¬¤¢¤ë¡£

̾Á°ÉÕ¤­¥»¥Þ¥Õ¥©

̾Á°ÉÕ¤­¥»¥Þ¥Õ¥©¤Ï /somename ¤È¤¤¤¦·Á¼°¤Î̾Á°¤Ç¼±Ê̤µ¤ì¤ë¡£ sem_open(3) ¤ËƱ¤¸Ì¾Á°¤òÅϤ¹¤³¤È¤Ë¤è¤ê¡¢2 ¤Ä¤Î¥×¥í¥»¥¹´Ö¤ÇƱ¤¸Ì¾Á°¤Î¥»¥Þ¥Õ¥© ¤ËÂФ·Áàºî¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤ë¡£

sem_open(3) ´Ø¿ô¤Ï¡¢¿·¤·¤¤Ì¾Á°ÉÕ¤­¥»¥Þ¥Õ¥©¤òºîÀ®¤¹¤ë¤«¡¢´û¤Ë¸ºß¤¹¤ë̾Á°ÉÕ¤­ ¥»¥Þ¥Õ¥©¤ò¥ª¡¼¥×¥ó¤¹¤ë¡£ ¥»¥Þ¥Õ¥©¤ò¥ª¡¼¥×¥ó¤·¤¿¸å¤Ï¡¢ sem_post(3) ¤È sem_wait(3) ¤ò»È¤Ã¤Æ¥»¥Þ¥Õ¥©¤òÁàºî¤Ç¤­¤ë¡£ ¥×¥í¥»¥¹¤¬¥»¥Þ¥Õ¥©¤Î»ÈÍѤò½ª¤¨¤¿ºÝ¤Ï¡¢ sem_close(3) ¤ò»È¤Ã¤Æ¥»¥Þ¥Õ¥©¤ò¥¯¥í¡¼¥º¤Ç¤­¤ë¡£ ¤¢¤ë¥»¥Þ¥Õ¥©¤ò¤É¤Î¥×¥í¥»¥¹¤â»ÈÍѤ·¤Ê¤¯¤Ê¤ë¤È¡¢ sem_unlink(3) ¤ò»È¤Ã¤Æ¤½¤Î¥»¥Þ¥Õ¥©¤ò¥·¥¹¥Æ¥à¤«¤éºï½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

̾Á°¤Ê¤·¥»¥Þ¥Õ¥© (¥á¥â¥ê¥Ù¡¼¥¹¡¦¥»¥Þ¥Õ¥©)

̾Á°¤Ê¤·¥»¥Þ¥Õ¥©¤Ï̾Á°¤ò»ý¤¿¤Ê¤¤¡£¤½¤ÎÂå¤ï¤ê¡¢¥»¥Þ¥Õ¥©¤Ï¡¢ Ê£¿ô¥¹¥ì¥Ã¥É´Ö¤Ç¶¦Í­¤µ¤ì¤¿¥á¥â¥êÎΰ衢¤â¤·¤¯¤ÏÊ£¿ô¥×¥í¥»¥¹´Ö¤Ç ¶¦Í­¤µ¤ì¤¿¥á¥â¥êÎΰè¤ËÃÖ¤«¤ì¤ë (Á°¼Ô¤ò ¥¹¥ì¥Ã¥É¶¦Í­¥»¥Þ¥Õ¥© (thread-shared semaphore)¡¢ ¸å¼Ô¤ò ¥×¥í¥»¥¹¶¦Í­¥»¥Þ¥Õ¥© (process-shared semaphore) ¤È¸Æ¤Ö)¡£¥¹¥ì¥Ã¥É¶¦Í­¥»¥Þ¥Õ¥©¤Ï¡¢Æ±¤¸¥×¥í¥»¥¹Æâ¤Î¥¹¥ì¥Ã¥É´Ö¤Ç¶¦Í­¤µ¤ì¤¿ ¥á¥â¥êÎΰ衢Î㤨¤ÐÂç°èÊÑ¿ô (global variable) ¤ËÇÛÃÖ¤µ¤ì¤ë¡£ ¥×¥í¥»¥¹¶¦Í­¥»¥Þ¥Õ¥©¤Ï¡¢¶¦Í­¥á¥â¥êÎΰè (Î㤨¤Ð¡¢ semget(2) ¤ò»È¤Ã¤ÆºîÀ®¤Ç¤­¤ë System V ¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ä shm_open(3) ¤ò»È¤Ã¤ÆºîÀ®¤Ç¤­¤ë POSIX ¶¦Í­¥á¥â¥ê¡¦¥ª¥Ö¥¸¥§¥¯¥È) Æâ¤ËÇÛÃÖ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

̾Á°¤Ê¤·¥»¥Þ¥Õ¥©¤Ï¡¢»ÈÍѤ¹¤ëÁ°¤Ë sem_init(3) ¤ò»È¤Ã¤Æ½é´ü²½¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¥»¥Þ¥Õ¥©¤Ï sem_post(3) ¤È sem_wait(3) ¤ò»È¤Ã¤ÆÁàºî¤Ç¤­¤ë¡£ ¥»¥Þ¥Õ¥©¤¬¤â¤Ï¤äɬÍפʤ¯¤Ê¤Ã¤¿¤È¤­¤ä¡¢ ¥»¥Þ¥Õ¥©¤¬ÃÖ¤«¤ì¤Æ¤¤¤ë¥á¥â¥ê¤ò²òÊü¤¹¤ëÁ°¤Ë¤Ï¡¢ sem_destroy(3) ¤ò»È¤Ã¤Æ¥»¥Þ¥Õ¥©¤òÇË´þ¤¹¤Ù¤­¤Ç¤¢¤ë¡£

Linux ¸ÇÍ­¤Î¾ÜºÙ»ö¹à

¥Ð¡¼¥¸¥ç¥ó

¥Ð¡¼¥¸¥ç¥ó 2.6 ¤è¤êÁ°¤Î¥«¡¼¥Í¥ë¤Ç¤Ï¡¢Linux ¤Ï ̾Á°¤Ê¤·¤Î¥¹¥ì¥Ã¥É¶¦Í­¥»¥Þ¥Õ¥©¤Î¤ß¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤¿¡£ Linux 2.6 ¤È NPTL ¥¹¥ì¥Ã¥É¼ÂÁõ¤òÄ󶡤·¤Æ¤¤¤ë glibc ¤¬Æþ¤Ã¤¿ ¥·¥¹¥Æ¥à¤Ç¤Ï¡¢POSIX ¥»¥Þ¥Õ¥©¤Î´°Á´¤Ê¼ÂÁõ¤¬Ä󶡤µ¤ì¤ë¡£

»ý³À­

POSIX ̾Á°ÉÕ¤­¥»¥Þ¥Õ¥©¤Ï¥«¡¼¥Í¥ëÆâ¤ÇÊÝ»ý¤µ¤ì¤ë¡£ sem_unlink(3) ¤Çºï½ü¤µ¤ì¤Ê¤±¤ì¤Ð¡¢¥»¥Þ¥Õ¥©¤Ï ¥·¥¹¥Æ¥à¤¬¥·¥ã¥Ã¥È¥À¥¦¥ó¤µ¤ì¤ë¤Þ¤Ç¸ºß¤·Â³¤±¤ë¡£

¥ê¥ó¥¯

POSIX ¥»¥Þ¥Õ¥© API ¤ò»ÈÍѤ·¤¿¥×¥í¥°¥é¥à¤Ï cc -lrt ¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¡¢¥ê¥¢¥ë¥¿¥¤¥à¥é¥¤¥Ö¥é¥ê librt ¤È¥ê¥ó¥¯¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à·Ðͳ¤Ç¤Î̾Á°ÉÕ¤­¥»¥Þ¥Õ¥©¤Ø¤Î¥¢¥¯¥»¥¹

Linux ¤Ç¤Ï¡¢Ì¾Á°ÉÕ¤­¥»¥Þ¥Õ¥©¤Ï²¾ÁÛ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à (virtual file system) Æâ¤Ë sem.name ¤È¤¤¤¦·Á¤Î̾Á°¤ÇºîÀ®¤µ¤ì¤ë¡£²¾ÁÛ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÏÄ̾ï /dev/shm °Ê²¼¤Ë¥Þ¥¦¥ó¥È¤µ¤ì¤ë¡£

½àµò

POSIX.1-2001.

Ãí°Õ

System V ¥»¥Þ¥Õ¥© (semget(2), semop(2) ¤Ê¤É) ¤Ï¸Å¤¤¥»¥Þ¥Õ¥© API ¤Ç¤¢¤ë¡£ POSIX ¥»¥Þ¥Õ¥©¤Ï System V ¤è¤ê¤â ´Êñ¤Ç¡¢¤¦¤Þ¤¯À߷פµ¤ì¤¿¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤òÄ󶡤·¤Æ¤¤¤ë¡£ °ìÊý¤Ç¡¢POSIX ¥»¥Þ¥Õ¥©¤Ï System V ¥»¥Þ¥Õ¥©¤ÈÈæ¤Ù¤ë¤È ÍøÍѤǤ­¤ë¥·¥¹¥Æ¥à¤¬¾¯¤Ê¤¤ (Æäˡ¢¸Å¤¤¥·¥¹¥Æ¥à¤Ç¤Ï¾¯¤Ê¤¤)¡£

Îã

³Æ¼ï¤Î POSIX ¥»¥Þ¥Õ¥©´Ø¿ô¤ò»ÈÍѤ·¤¿Î㤬 sem_wait(3) ¤Ëµ­ºÜ¤µ¤ì¤Æ¤¤¤ë¡£

´ØÏ¢¹àÌÜ

sem_close(3), sem_destroy(3), sem_init(3), sem_getvalue(3), sem_open(3), sem_post(3), sem_unlink(3), sem_wait(3), pthreads(7)