ãããããã¡ã¤ã«ã®äºéèµ·åã®é²ãæ¹ãPHPå¤
æã
(ãããã¯ããã£ã¡ã
ã)ããã®ã§ãããããããã¡ã¤ã«ããäºéã«åãã¨å¾å¦»ãããããªãããªç¶æ³ãããã¾ãã
ããããã¯ãã¡ã¤ã«ã«ããäºéèµ·åé²æ¢ã¨ããè¦ãã®ã§ããâ¦ããã¡ãã£ã¨æ¥½ãªæ段ãããã®ã§ãã¾ããã«ã¼ãã®ä¸æãç¨åº¦ã«ã
æ©æ§ã¨ãã¦ã¯ãè³æ¥µä¸è¬çãªãã»ããã©ãã使ãã¾ãã
ã»ããã©ã¯ãããã»ã¹ééä¿¡ãã®ä¸ç°ã«ãªãã¾ããâ¦ãã以ä¸ãç¥ãããã£ãããCè¨èªç³»ã®æ¸ç±ãé©å®ããã£ã¦ãã ããã¾ãã
â¦ãã®ãã¡è§£èª¬ããããããã¾ãããªã¯ã¨ã¹ãã¯ã³ã¡ã³ããããã¯ãªã¢ã«ã§ç´æ¥ã©ããã
ãµã³ãã«ã³ã¼ããããæ©éãã¤ã¨ã£ã¨ã¨å®è£
ãã¾ãªãã§ã¿ã¾ããã
ã¾ãã¯ãããã¯ããã¦ããªããç¶æ
ãä½æãã¦ç¢ºèªã
ããããã¡ã¤ã«ã¯ãããªæãããã¡ã¤ã«åã¯ãt.phpãã¨ãããç´ æ´ãããæãããã¼ãã³ã°ã
// å¦ç $pid = posix_getpid(); // print "start({$pid}) \n"; sleep(5); print "end({$pid}) \n";
ããããããæãã§ã²ã¨ã¤ãstartã£ã¦ãããã°åºåãã¦ãããsleepï¼ããã£ã¨ãè²ã
ãªãããå¦çããendããããã°åºåçãªæãï¼
â¦ããsleepï¼ç§ã¯ãçãããã§å¾®å¦ã«é·ããã§ãããããããããé©å½ã«æ°åãå
¥ãæ¿ãã¦ãã ããã
ãã®åãããã¦ãã»ã¼åæã«ãå©ãã¾ãã
ãããªãã¡ã¤ã«ãç¨æããã¹ããªãã§ãããã¡ããã¯ãã®ãã¡ã¤ã«åããtttãã¨ãã¾ããã
php t.php & php t.php & php t.php & php t.php & php t.php &
ãããå®è¡ãã¦ã¿ã¾ãã
sh ttt
[gallu:~]start(10228)
start(10231)
start(10227)
start(10229)
start(10230)
end(10228)
end(10227)
end(10231)
end(10229)
end(10230)
æä»å¶å¾¡ãã¸ã£ããããããã¾ããã
ã§ã¯ãã»ããã©ã§æä»ãã¦ã¿ã¾ãããã
// ã»ããã©ãåå¾ $sobj = sem_get(123); $r = sem_acquire($sobj); // å¦ç $pid = posix_getpid(); // print "start({$pid}) \n"; sleep(5); print "end({$pid}) \n"; // ã»ããã©ãè§£æ¾ sem_release($sobj);
ãã£ãä¸è¡ã§ãã»ããã®ã¨ããã
sh ttt
[gallu:~]start(10353)
end(10353)
start(10351)
end(10351)
start(10352)
end(10352)
start(10355)
end(10355)
start(10354)
end(10354)
OSã®ãå¾®å¦ãªããã»ã¹IDã®ãµããããã¯æ°ã«ããã«ã
ã¡ãªã¿ã«ãä¸å¯§ã« sem_release ãã¦ã¾ãããåºæ¬ãä¸è¿°ã®ã³ã¼ããªãä¸è¦ã§ãã
// ã»ããã©ãåå¾ $sobj = sem_get(123); $r = sem_acquire($sobj); // å¦ç $pid = posix_getpid(); // print "start({$pid}) \n"; sleep(5); print "end({$pid}) \n";
å®è¡çµæ
sh ttt
start(10515)
[gallu:~]end(10515)
start(10517)
end(10517)
start(10516)
end(10516)
start(10518)
end(10518)
start(10519)
end(10519)
ãããªæãã
æ¨æ¥ãåå¼·ä¼ã£ã¦ãããã¶ã£ã¡ãããéçºå宿ãã©ããã§ããã¡ã®åãã¡ãç¥ãããã£ãã®ã§ãåå¿é²ããã¦ã