.
ʵÑéËÄ ½ø³ÌÓëÏß³Ì
Ò»¡¢ ʵÑéÄ¿µÄ
£¨1£©Àí½â½ø³ÌµÄ¶ÀÁ¢¿Õ¼ä£» £¨2£©Àí½âÏ̵߳ÄÏà¹Ø¸ÅÄî¡£
¶þ¡¢ ʵÑéÄÚÈÝÓëÒªÇó
1¡¢²éÔÄ×ÊÁÏ£¬ÕÆÎÕ½ø³Ì´´½¨ºÍ¹¹ÔìµÄÏà¹ØÖªÊ¶ºÍÏ̴߳´½¨ºÍ¹¹ÔìµÄÏà¹ØÖªÊ¶£¬Á˽âCÓïÑÔ³ÌÐò±àдµÄÏà¹ØÖªÊ¶£»
2¡¢Àí½â½ø³ÌµÄ¶ÀÁ¢¿Õ¼äµÄʵÑéÄÚÈݼ°²½Öè
£¨1£©±àдһ¸ö³ÌÐò£¬ÔÚÆä main£¨£©º¯ÊýÖж¨ÒåÒ»¸ö±äÁ¿ shared£¬¶ÔÆä½øÐÐÑ»·¼Ó/¼õ²Ù×÷£¬²¢Êä³öÿ´Î²Ù×÷ºóµÄ½á¹û£»
£¨2£©Ê¹ÓÃϵͳµ÷Óà fork£¨£©´´½¨×Ó½ø³Ì£¬¹Û²ì¸Ã±äÁ¿µÄ±ä»¯£»
£¨3£©Ð޸ijÌÐò°Ñ shared±äÁ¿¶¨Òåµ½ main£¨£©º¯ÊýÖ®Íâ£¬ÖØ¸´µÚ£¨2£©²½²Ù×÷£¬¹Û²ì¸Ã±äÁ¿µÄ±ä»¯¡£
3¡¢Àí½âÏ̵߳ÄʵÑé²½Öè
£¨1£©±àдһ¸ö³ÌÐò£¬ÔÚÆä main£¨£©º¯ÊýÖд´½¨Ò»¸ö£¨»ò¶à¸ö£©Ị̈߳¬¹Û²ì¸ÃÏß³ÌÊÇÈçºÎÓëÖ÷Ï̲߳¢·¢ÔËÐеġ£Êä³öÿ´Î²Ù×÷ºóµÄ½á¹û£»
£¨2£©ÔÚ main()º¯ÊýÍⶨÒåÒ»¸ö±äÁ¿shared£¨È«¾Ö±äÁ¿£©£¬ÔÚmain()Öд´½¨Ò»¸öỊ̈߳¬ÔÚ main()ÖкÍÐÂÏß³Ìshared½øÐÐÑ»·¼Ó/¼õ²Ù×÷£¬¹Û²ì¸Ã±äÁ¿µÄ±ä»¯£»
£¨3£©Ð޸ijÌÐò°Ñshared±äÁ¿¶¨Òåµ½ main£¨£©º¯ÊýÖ®ÄÚ£¬Öظ´µÚ£¨2£©²½²Ù×÷£¬¹Û²ì¸Ã±äÁ¿µÄ±ä»¯¡£
4¡¢¶ÔÕû¸öʵÑé¹ý³Ì½øÐзÖÎö×ܽᣬ¸ø³öÏêϸ²½Ö裻 (1) ¹Û²ìÉÏÊö½ø³ÌÖ´Ðнá¹û£¬²¢·ÖÎöÔÒò£»
.
.
(2) Ìá½»Ô´³ÌÐòÇåµ¥£¬²¢¸½¼ÓÁ÷³ÌͼÓë×¢ÊÍ¡£
Èý¡¢ ʵÑé¹ý³Ì
1¡¢½ø³ÌµÄÓëÏ̵߳Ĵ´½¨ºÍ¹¹Ôì (1).½ø³ÌµÄ´´½¨ºÍ¹¹Ôì
½ø³Ì¼òµ¥À´Ëµ¾ÍÊÇÔÚ²Ù×÷ϵͳÖÐÔËÐеijÌÐò£¬ËüÊDzÙ×÷ϵͳ×ÊÔ´¹ÜÀíµÄ×îСµ¥Î»¡£µ«Êǽø³ÌÊÇÒ»¸ö¶¯Ì¬µÄʵÌ壬ËüÊdzÌÐòµÄÒ»´ÎÖ´Ðйý³Ì¡£½ø³ÌºÍ³ÌÐòµÄÇø±ðÔÚÓÚ£º½ø³ÌÊǶ¯Ì¬µÄ£¬³ÌÐòÊǾ²Ì¬µÄ£¬½ø³ÌÊÇÔËÐÐÖеijÌÐò£¬¶ø³ÌÐòÊÇһЩ±£´æÔÚÓ²ÅÌÉϵĿÉÖ´ÐдúÂë¡£
еĽø³Ìͨ¹ý¿Ë¡¾ÉµÄ³ÌÐò£¨µ±Ç°½ø³Ì£©¶ø½¨Á¢¡£fork() ºÍ clone()£¨¶ÔÓÚỊ̈߳©ÏµÍ³µ÷ÓÿÉÓÃÀ´½¨Á¢ÐµĽø³Ì¡£ £¨2£©Ï̵߳Ĵ´½¨ºÍ¹¹Ôì
Ïß³ÌÒ²³Æ×öÇáÁ¿¼¶½ø³Ì¡£¾ÍÏñ½ø³ÌÒ»Ñù£¬Ïß³ÌÔÚ³ÌÐòÖÐÊǶÀÁ¢µÄ¡¢²¢·¢µÄÖ´Ðз¾¶£¬Ã¿¸öÏß³ÌÓÐËü×Ô¼ºµÄ¶ÑÕ»¡¢×Ô¼ºµÄ³ÌÐò¼ÆÊýÆ÷ºÍ×Ô¼ºµÄ¾Ö²¿±äÁ¿¡£µ«ÊÇ£¬Óë¶ÀÁ¢µÄ½ø³ÌÏà±È£¬½ø³ÌÖеÄÏß³ÌÖ®¼äµÄ¶ÀÁ¢³Ì¶ÈҪС¡£ËüÃǹ²ÏíÄÚ´æ¡¢Îļþ¾ä±úºÍÆäËûÿ¸ö½ø³ÌÓ¦ÓеÄ״̬¡£
Ï̵߳ijöÏÖÒ²²¢²»ÊÇΪÁËÈ¡´ú½ø³Ì£¬¶øÊǶԽø³ÌµÄ¹¦ÄÜ×÷ÁËÀ©Õ¹¡£½ø³Ì¿ÉÒÔÖ§³Ö¶à¸öỊ̈߳¬ËüÃÇ¿´ËÆÍ¬Ê±Ö´ÐУ¬µ«Ï໥֮¼ä²¢²»Í¬²½¡£Ò»¸ö½ø³ÌÖеĶà¸öÏ̹߳²ÏíÏàͬµÄÄÚ´æµØÖ·¿Õ¼ä£¬Õâ¾ÍÒâζ×ÅËüÃÇ¿ÉÒÔ·ÃÎÊÏàͬµÄ±äÁ¿ºÍ¶ÔÏ󣬶øÇÒËüÃÇ´Óͬһ¶ÑÖзÖÅä¶ÔÏó¡£¾¡¹ÜÕâÈÃÏß³ÌÖ®¼ä¹²ÏíÐÅÏ¢±äµÃ¸üÈÝÒ×£¬µ«Äã±ØÐëСÐÄ£¬È·±£ËüÃDz»»á·Á°Í¬Ò»½ø³ÌÀïµÄÆäËûÏ̡߳£
Ïß³ÌÓë½ø³ÌÏàËÆ£¬ÊÇÒ»¶ÎÍê³Éij¸öÌØ¶¨¹¦ÄܵĴúÂ룬ÊdzÌÐòÖе¥¸ö˳ÐòµÄÁ÷¿ØÖÆ£¬µ«Óë½ø³Ì²»Í¬µÄÊÇ£¬Í¬ÀàµÄ¶à¸öÏß³ÌÊǹ²Ïíͬһ¿éÄÚ´æ¿Õ¼äºÍÒ»×éϵͳ×ÊÔ´µÄ£¬¶øÏ̱߳¾ÉíµÄÊý¾Ýͨ³£Ö»ÓÐ΢´¦ÀíÆ÷µÄ¼Ä´æÆ÷Êý¾Ý£¬ÒÔ¼°Ò»¸ö¹©³ÌÐòÖ´ÐÐʱʹÓõĶÑÕ»¡£ËùÒÔϵͳÔÚ²úÉúÒ»¸öỊ̈߳¬»òÕßÔÚ¸÷¸öÏß³ÌÖ®¼äÇл»Ê±£¬¸ºµ£Òª±È½ø³ÌСµÃ¶à£¬ÕýÒòÈç´Ë£¬Ïß³ÌÒ²±»³ÆÎªÇáÐͽø³Ì£¨light-weight process£©¡£Ò»¸ö½ø³ÌÖпÉÒÔ°üº¬¶à¸öÏ̡߳£
2¡¢Àí½â½ø³ÌµÄ¶ÀÁ¢¿Õ¼ä
Á÷³ÌͼÈçÏÂËùʾ£º
.
.
shared = 1
pid = fork() Y N Y pid > 0 Êä³öshared²Ù×÷ pid < 0 ERROR
N Y pid ==0
£¨1£©±àдһ¸ö³ÌÐò£¬ÔÚÆä main£¨£©º¯ÊýÖж¨ÒåÒ»¸ö±äÁ¿ shared£¬¶ÔÆä½øÐÐÑ»·¼Ó/¼õ²Ù×÷£¬²¢Êä³öÿ´Î²Ù×÷ºóµÄ½á¹û Ô´³ÌÐòÈçÏÂËùʾ:
#include
int main() {
int shared=1;
shared++;
printf(\
shared--;
Êä³öshared²Ù×÷ .
.
printf(\
shared++;
printf(\
shared--;
printf(\
return 0; }
ÔËÐнá¹ûÈçͼËùʾ£º
£¨2£©Ê¹ÓÃϵͳµ÷Óà fork£¨£©´´½¨×Ó½ø³Ì£¬¹Û²ì¸Ã±äÁ¿µÄ±ä»¯
Ìí¼Ó½ø³Ì´´½¨Óï¾äºó£¬³ÌÐòÔËÐнá¹ûÈçÏ£¬×Ó½ø³ÌºÍ¸¸½ø³Ì¶¼Ö´ÐÐÁ˲Ù×÷£¬Çұ˴ËÖ®¼ä¶ÔÓÚͬһ¸ö±äÁ¿sharedµÄ×Ô¼Ó²Ù×÷»¥²»Ó°Ïì¡£
´úÂëÈçÏÂͼËùʾ£º
.