OS

Go back

OS Review
Device Driver
NS Tools

Home
Papers
Daily Link


To Main
7. Å©¸®Æ¼Äà ¼½¼Ç ¹®Á¦ (The Critical Section Problem)

¾Æ, Áö±Ý Ã¥¿¡¼­ Áñ°Ì°Ô ¶Ù¾î³ë´Â Àú °ø·æÀº ³»¸¾À» ¾Æ´ÂÁö ¸ð¸£´ÂÁö,,,º» Àå¿¡¼­ ´Ù·ê ³»¿ëÀº ±³°ú¼­ 6Àå¿¡ ´ëÀÀ µË´Ï´Ù. Process Synchronization(Sync)ÀÌÁÒ. Àü¿¡ Çѹø ½ÌÅ©°¡ ¹«¾ùÀÎÁö¸¦ °£·«ÇÏ°Ô ¼³¸íÇÑ ÀûÀÌ ÀÖ½À´Ï´Ù¸¸, ¿©±â¼­ÀÇ ½ÌÅ©¶õ Á»´õ ±¸Ã¼ÀûÀ¸·Î ¸»ÇÏ¸é ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º°¡ °øµ¿À¸·Î ÂüÁ¶ÇÏ·Á´Â µ¥ÀÌÅ͸¦ ÀÏ°ü¼ºÀÖ°Ô À¯Áö½ÃÅ°´Â µ¿±âÈ­¸¦ ÀǹÌÇÏ°Ô µË´Ï´Ù. ¹Ù·Î ÀüÀå¿¡¼­ ÇÑ ÇÁ·Î¼¼½º°¡ º¯È­¸¦ ÁÖ´Â °úÁ¤¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÂüÁ¶ÇÏ·Á´Â ÇàÀ§´Â ÂüÀ¸·Î À§ÇèÇÏ´Ù°í ¸»ÇÑ ¹Ù°¡ ÀÖÁÒ? ÀÌ »ç°Ç¿¡ ´ëÇÑ ´ëÃ¥À» À̹øÀå¿¡¼­´Â ´Ù·ç´Â °ÍÀÌÁÒ.

±³°ú¼­ÀÇ 6ÀåÀº »ç½Ç, ÀÌ OS°³·ÐÀÇ ÇÙ½ÉÀ̱⵵ ÇÕ´Ï´Ù. ¾ó¸¸Å­ ÇÙ½ÉÀ̳Ä,,,Á¦°¡ µéÀº º»°ú¸ñÀÇ °­ÀÇÀÇ Áß°£°í»ç ½ÃÇè¹üÀ§°¡ ¹Ù·Î 6Àå, ÀÌ ÇÑÀåÀ̾ú´Ù´Â »ç½Ç¸¸À¸·Îµµ ´À³¦ÀÌ ¿À½Ç°Å¶ó »ý°¢µÇ´Â±º¿ä. ÇÏ¿©°£ Ã¥¿¡ °£°£ÀÌ µîÀåÇÏ´Â ¾Ë°í¸®ÁòµéÀ» ¿©·¯ºÐµéÀÌ ±×³É Çѹø Àаí ÀÌÇظ¦ ÇÏ½Å´Ù¸é ¿©·¯ºÐÀº Ʋ¸²¾ø´Â õÀç¶ó´Â »ç½ÇÀ» ¸ÕÀú ¸»¾¸µå¸®°í ½Í±º¿ä. °ÌÁÖÀڴ°ŠÀý´ë ¾Æ´Õ´Ï´Ù. ´ÜÁö Á¶±Ý ¾î·Á¿ï¼öµµ ÀÖÁö¸¸ ¿©·¯¹ø ¹Ýº¹Çؼ­ »ý°¢Çغ¸¸é ±ú´ÞÀ½ÀÌ ¿Ã°ÍÀ̶ó´Â ÀúÀÇ °Ý·ÁÀÔ´Ï´Ù ^^. Âü°í·Î Àú´Â Ã¥¿¡ µîÀåÇÏ´Â ¸ðµç ¾Ë°í¸®ÁòµéÀ» ¿©±â¼­´Â ´Ù·çÁö ¾ÊÀ»°ÍÀÔ´Ï´Ù. ÇÑ ¾Ë°í¸®Áò ¼³¸íÇϴµ¥ ÀÌ·± ¹®¼­ ÇÑÀåÁ¤µµ°¡ ¼Ò¿äµÉ¼öµµ Àְŵç¿ä. ±×·³ ½½½½ ½ÃÀÛÀ» ÇϰνÀ´Ï´Ù.

Ã¥ÀÇ Ãʹݺο¡ µîÀåÇÏ´Â °ÍÀº ¹Ù·Î ÄÁ¼ö¸Ó-ÇÁ·Îµà¼­(consumer-producer) Æз¯´ÙÀÓÀÔ´Ï´Ù. ÀÌ°ÍÀº ¹«¾ùÀ̳Ä, ÇÑ ÇÁ·Î¼¼½º´Â µ¥ÀÌÅ͸¦ »ý»êÇس»°í, ¶ÇÇÑ ÇÁ·Î¼¼½º´Â µ¥ÀÌÅ͸¦ ¼ÒºñÇÏ°Ô µÇ´Â °ÍÀÌÁö¿ä. ÀÌ µÑ°£ÀÇ ÇÁ·Î¼¼½º´Â °í·Î ÀÏÁ¾ÀÇ 'Åë½Å'À» ÇÊ¿ä·Î ÇÏ°Ô µÇ´Âµ¥ ÇÁ·Îµà¼­¿Í ÄÁ¼ö¸Ó´Â °¢°¢ ¾î´À µ¥ÀÌŸ°¡ ¿À°í °¬´Ù´Â »ç½ÇÀ» Æ®·¢Å·Çϱâ À§Çؼ­ Ä«¿îÅÍ(counter)¸¦ ÇÊ¿ä·Î ÇÏ°Ô µÇÁÒ. À̶§ ±× Ä«¿îÅ͸¦ µÎ°³ÀÇ ÇÁ·Î¼¼½º°¡ °øÀ¯Çϸ鼭 À¯ÁöÇÑ´Ù´Â »ç½ÇÀ» ¿ì¸®µéÀº ÁÖÁöÇÒ ÇÊ¿ä°¡ ÀÖ°í, ±× Ä«¿îÅÍ´Â ÄÚµå»ó¿¡¼­´Â ±×³É "counter=counter+1" ¶Ç´Â "counter=counter-1"µîÀ¸·Î ³ªÅ¸³»ÁÜÀ¸·Î½á °¢°¢ Áõ°¡ ¶Ç´Â °¨¼Ò ½ÃŲ´Ù´Â °ÍÂëÀº ¿ì¸®µµ ¾Ë°í ÀÖ°ÚÁÒ. ÀÚ, À̶§ counter¶ó´Â º¯¼ö°¡ ¾¾ÇÇÀ¯ ³»ºÎ ¿¡¼­´Â ¾î¶»°Ô Áõ°¡ÇÏ°í ¶Ç °¨¼ÒµÇ´ÂÁö Çѹø º¾½Ã´Ù. ¾ÕÀ¸·Î µîÀåÇÏ´Â ¸ðµç ¾Ë°í¸®ÁòµéÀº ¸ðµÎ ÆĽºÄ®(Pascal)¹öÁ¯ÀÔ´Ï´Ù.

counterÀÇ Áõ°¡                                       counterÀÇ °¨¼Ò 
register1:=counter;              1´Ü°è               register2:=counter; 
register1:=register+1;           2´Ü°è               register2:=register-1; 
counter:=register1;              3´Ü°è               counter:=register2; 

±×·¸½À¹Ì´Ù! ¾Ë°íº¸´Ï °Ü¿ì 1Áõ°¡ ½ÃÅ°´Â ¿¬»êÁ¶Â÷ ¸ÛûÇÑ ¾¾ÇÇÀ¯´Â ÃÑ 3´Ü°è·Î ³ª´©¾î¼­ ¼öÇàÀ» ÇÏ°í ÀÖ¾úÀ½À» ¿ì¸®´Â ¿©±â¼­ ¾Ë¼ö ÀÖ°ÔµÇÁÒ. Âü°í·Î ·¹Áö½ºÅͶõ ¾¾ÇÇÀ¯ ³»ºÎ¿¡ ÀÖ´Â ¾ÆÁÖ Å©±â°¡ ÀÛÁö¸¸ ¸Å¿ì ºü¸¥ Àӽñâ¾ï¼ÒÀÚ¶ó°í Àü¿¡ ¸»¾¸µå¸°Àû ÀÖÁÒ?

À̶§, ÇÁ·Îµà¼­°¡ µ¥ÀÌÅÍ ÇÑ°³°¡ »ý°åÀ½À» ³ªÅ¸³»±â À§ÇØ Ä«¿îÅÍ Áõ°¡ÀÇ 2´Ü°è¸¦ ¼öÇàÇÏ°í ÀÖ´Â ¼ø°£ °©ÀÚ±â ÄÁ¼ö¸Ó°¡ Ä«¿îÅÍÀÇ °ªÀÌ ¹¹³Ä! ½Í¾î¼­ Ä«¿îÅ͸¦ Àоîµé¿´´Ù°í Ĩ½Ã´Ù. ¼ø°£, ÀÌ¹Ì ¶§´Â ´Ê¾ú°í, ÇÁ·Îµà¼­¿Í ÄÁ¼ö¸Ó´Â °¢°¢ÀÇ Ä«¿îÅÍ °ªÀ¸·Î ¼­·Î Âø°¢¼Ó¿¡¼­ ½Å³ª°Ô ¸¸µé¾î ´ë°í ½Å³ª°Ô ¼ÒºñÇÕ´Ï´Ù. °á±¹ µÑÀº ¼­·Î »ðÁúÇÏ´Â °¡¿îµ¥ ³ªÁß¿¡´Â ¼ýÀÚÇϳª ¼­·Î Á¦´ë·Î ¸ø¼¼´Â ºéµû¸®°¡ µÇ¾î¹ö¸®°í ¸¿´Ï´Ù.

¹Ù·Î, À̼ø°£, À§ÀÇ ÃÑ 3´Ü°èó·³ ÇÁ·Î¼¼½ºµé°£¿¡ °øÀ¯ÇÏ´Â ¾î¶² °ªÀ̳ª µ¥ÀÌÅÍ, ¶Ç´Â Å×À̺íÀ» ¾÷µ¥ÀÌÆ® ÇÏ´Â ¼ø°£À» ´ã°íÀÖ´Â ÄÚµåÀÇ ºÎºÐ(segment)À» ¹Ù·Î Å©¸®Æ¼Äà ¼½¼Ç(Critical-Section)À̶ó°í ÀÏÄ°í, À̹®Á¦¸¦ Á¤ÀÇÇÏ°í ÇØ°áÇÏ´Â ¹æ¹ý·ÐÀ» Á¦½ÃÇϴ°ÍÀ» Critical-Section ProblemÀ̶ó°í ÇÕ´Ï´Ù.

À̹®Á¦¸¦ ÇÇÇÒ¼ö ÀÖ´Â ¹æ¹ýÀº °á±¹ ½Ã°£ÀûÀ¸·Î ÇÑ ÇÁ·Î¼¼½º°¡ ÀÚ½ÅÀÇ Å©¸®Æ¼Äà ¼½¼Ç¿¡ µ¹ÀÔÇÏ¸é ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀº Àý´ë·Î °°Àº ½Ã°£¿¡ ÀÚ½ÅÀÇ Å©¸®Æ¼Äà ¼½¼Ç¿¡ µ¹ÀÔ ¸øÇÏ°Ô ¸¸µå´Â »óÈ£ ¹èŸ(mutually exclusive-¾ÕÀ¸·Î´Â ±×³É ¹ÂÅؽº(mutex)¶ó°í ÇÏ°Ú½À´Ï´Ù)¼ºÀ» ºÎ¿©ÇØÁÜÀ¸·Î¼­ ÇØ°áÇÏ´Â °ÍÀÌÁÒ. Áï, ÇÑ ÇÁ·Î¼¼½º°¡ °øÀ¯ µ¥ÀÌÅ͸¦ ¹Ù²Ù°í ÀÖ´Â ¿ÍÁß¿¡´Â ´Ù¸¥ ÇÁ·Î¼¼½º´Â ±× µ¥ÀÌÅ͸¦ Àý´ë·Î Àд°ÍÀº ¹°·ÐÀÌ¿ä, º¯°æÀÚü¸¦ ¸øÇÏ°Ô ÇÑ´Ù´Â ¸»ÀÔ´Ï´Ù.

ÀÓÀÇÀÇ ÇÁ·Î¼¼½º¸¦ Å©¸®Æ¼Äà ¼½¼Ç(¾ÕÀ¸·Î´Â CS¶ó°í °£´ÜÇÏ°Ô ¸»ÇÏÁÒ)À» °í·ÁÇÑ ±âÁØ¿¡¼­ ±¸Á¶È­ ½ÃÄѺ¸¸é ¾Æ·¡¿Í °°ÀÌ º¼¼ö ÀÖ¾î¿ä.

repeat 
   entry section 
      Critical Section(CS) 
   exit section 
      Remainder Section(RS) 
until false; 

Áï, ÇÁ·Î¼¼½º´Â Å©°Ô È帧»ó CS¿Í RS·Î ³ª´­¼ö°¡ ÀÖ´Ù´Â ¸»ÀÔ´Ï´Ù. À̶§ CS ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¾Ë°í¸®ÁòÀº ´ÙÀ½ÀÇ 3°¡Áö Á¶°ÇÀ» ¹Ýµå½Ã ¸¸Á·ÇØÁà¾ß ÇÕ´Ï´Ù.

1. »óÈ£¹èŸ¼º(¹ÂÅؽº:mutual exclusion) : ÇÁ·Î¼¼½º Pi°¡ ÀÚ½ÅÀÇ CS¿¡ µ¹ÀÔÇϸé, ´Ù¸¥ ÇÁ·Î¼¼½º´Â Àý´ë·Î ±×µéÀÇ CS·Î µ¹ÀÔÇÏÁö ¸øÇÑ´Ù.

2. ÁøÇ༺(progress) : ¸¸ÀÏ ¾î¶² ÇÁ·Î¼¼½ºµµ ÀÚ½ÅÀÇ CS¿¡ µ¹ÀÔÇÑ »óÅ°¡ ¾Æ´Ï°í, CS¿¡ µ¹ÀÔÇϱ⸦ ¿øÇÏ´Â ÀÓÀÇÀÇ ÇÁ·Î¼¼½ºµéÀÌ Á¸ÀçÇÑ´Ù¸é, ÀÚ½ÅÀÇ RS¿¡ µ¹ÀÔÇÑ ÇÁ·Î¼¼½º¸¦ Á¦¿ÜÇÑ ÇÁ·Î¼¼½ºµéÀÇ CS³»ºÎ·ÎÀÇ ÁøÀÔÀÌ ¹«±âÇÑ ¿¬±âµÇ¼­´Â ¾ÈµÈ´Ù.

3. Á¤ÇØÁø ±â´Ù¸²(bounded waiting) : ÇÑ ÇÁ·Î¼¼½º°¡ CS¿¡ µ¹ÀÔÇϱ⸦ ¿äûÇÑµÚ CS¿¡ ½ÇÁ¦·Î µ¹ÀÔÇϱâ Àü±îÁö´Â Á¤ÇØÁø Ƚ¼ö ÀÌÇÏ ¸¸Å­ÀÇ ±â´Ù¸²ÀÌ Á¸ÀçÇØ¾ß ÇÑ´Ù.

Èì,,,¸»ÀÌ Á¶±Ý ¾î·ÆÁÒ? ±×·¡µµ ÇÒ¼ö ¾ø¾î¿ä, ½±°Ô ¸ðµç°É ¾òÀ¸·ÁÇÏ´ÂÀÚ µµµÏ³ðÀ̶ó´Ñ±ñ,,,

¸ÕÀú Ã¥¿¡´Â 2°¡ÁöÀÇ ¾Ë°í¸®ÁòÀÌ µîÀåÇÏÁö¿ä, ºñ±³Àû ´Ü¼øÇÑ ¾Ë°í¸®Áòµé·Î½á ù° ¾Ë°í¸®ÁòÀº turnÀ̶ó´Â º¯¼ö·Î ¾î¶² ÇÁ·Î¼¼½º°¡ CS¿¡ µé¾î°¥°ÍÀΰ¡¸¦ °áÁ¤ÇØÁÖ´Â ¾Ë°í¸®ÁòÀÌ°í, µÎ¹ø° ¾Ë°í¸®ÁòÀº flag[]¶ó´Â ¹è¿­À» ÀÌ¿ëÇؼ­ °¢ ÇÁ·Î¼¼½ºÀÇ »óÅÂ(CS¿¡ ÀÖ´ÂÁö ¾Æ´Ï¸é ±× ¹Û¿¡ ÀÖ´ÂÁö)¿¡ ´ëÇÑ Á¤º¸¸¦ À¯ÁöÇÏ´Â ¾Ë°í¸®Áò µéÀÌÁÒ. ÀÌ µÎ ¾Ë°í¸®ÁòÀº ¸ðµÎ »óÈ£ ¹èŸ¼ºÀ» ¸¸Á·½ÃÄÑ´Â ÁÖÁö¸¸ ÁøÇ༺¿¡¼­ ²ÎÀÌ µÇ¹ö¸³´Ï´Ù. ±×·¡¼­ µîÀåÇÏ´Â °ÍÀÌ Á¦ 3ÀÇ ¾Ë°í¸®ÁòÀε¥ ¿©±â¿¡¼­ turn°ú flag[]¸¦ ±³¹¦ÇÏ°Ô ¼¯¾î¼­ À§ÀÇ 3°¡Áö Á¶°ÇÀ» ¸ðµÎ ´Ù ¸¸Á·½ÃÄÑÁÖ´Â Äè°Å¸¦ ÀÌ·èÇÕ´Ï´Ù. Ç㳪! ÁÁ¾ÆÇϱ⿡´Â ¾ÆÁ÷ À̸¨´Ï´Ù. ¿Ö³ÄÇϸé ÀÌ°ÍÀº ÇÁ·Î¼¼½º°¡ ´ÜÁö 2°³ ÀÖÀ»¶§¸¸ »ç¿ëÀÌ °¡´ÉÇÑ Â¦Åü ¾Ë°í¸®ÁòÀ̱⠶§¹®ÀÔ´Ï´Ù.

±×·¸´Ù¸é, ¿©·¯°³ÀÇ ÇÁ·Î¼¼½ºµé¿¡ ´ëÇÑ CS¹®Á¦¸¦ ÇØ°áÇÒ¼ö´Â ¾ø´Â°¡? ´ç¿¬ÀÌ ÀÖÁö¿ä. ¹Ù·Î ±× À̸§µµ À¯¸íÇÑ Bakery AlgorithmÀÔ´Ï´Ù. º£ÀÌÄ¿¸® ¾Ë°í¸®ÁòÀº ¸¶Ä¡ »§Áý¿¡ »§À» »ç·Á µé¾î¿ÔÀ¸³ª »ç¶÷µéÀÌ ¿ö³« ºÏÀû°Å·Á¼­ ´ë±âÇ¥¸¦ ¹Þ°í »§À» ±¸ÀÔÇÏ·Á ±â´Ù¸®´Â »ç¶÷µéÀ» ÇÁ·Î¼¼½º¿¡ ºñÀ¯¸¦ Çؼ­ ¸¸µç ¾Ë°í¸®ÁòÀ̶ø´Ï´Ù. Ã¥ÀÌ ¾ø´Â ºÐ°ú Ã¥Àº ÀÖÀ¸³ª ÀüÇô ÀÌÇØ°¡ °¡Áö ¾Ê´ÂºÐÀ» À§ÇØ ´õÆÛ±º, ÀÌ·¸°Ô ¼Õ¼ö ¾Ë°í¸®Áò¹× ±× ¿ø¸®¸¦ ±â¼úÇص帳´Ï´Ù.

Bakery Algorithm

º» ¾Ë°í¸®ÁòÀº Pi°¡ CS¿¡ µ¹ÀÔÇϱâ À§Çؼ­ »ç¿ëÇÏ´Â ¾Ë°í¸®ÁòÀ̸ç, ¸ÕÀú ¸ðµç ÇÁ·Î¼¼½º »çÀÌ¿¡¼­ °øµ¿À¸·Î »ç¿ëµÇ´Â º¯¼öµéÀ» ¾Ë¾Æº¸ÁÒ.

var choosing: array[0..n-1] of boolean; 
    number: array[0..n-1]of integer; 

¶ÇÇÑ ¿©±â¼­ »ç¿ëÇÏ´Â ±âÈ£¿¡ ´ëÇÑ Àǹ̸¦ Á¤ÀÇÇÏ¸é ´ÙÀ½°ú °°½À´Ï´Ù.

(a,b)<(c,d) : a°¡ cº¸´Ù Å©°Å³ª ¶Ç´Â a¿Í c°¡ °°°í d°¡ bº¸´Ù Å«°æ¿ì ÂüÀ̵Ê. 
max(a0, ...an-1) : ¸»±×´ë·Î a0°ú an-1 »çÀÌ(ÃÑ n°³°¡ ÀÖÁÒ?)¿¡¼­ Á¦ÀÏ Å«³ð. 
no-op : ¾Æ¹«Áþ ÇÏÁö ¸»¶ó´Â ¼Ò¸®ÀÓ. 

¾Ë°í¸®Áò ¸öÅëÀº ´ÙÀ½°ú °°½À´Ï´Ù.

repeat 
    
   choosing[i]:=true; 
   number[i]:=max(number[0], number[1],...,number[n-1])+1; 
   choosing[i]:=false; 
   for j:=0 to n-1 
      do begin 
         while choosing[j] do no-op; 
         while number[j]!=0 
            and(number[j],j)<(number[i],i) do no-op; 
      end; 

   CS 

   number[i]:=0; 

   RS 

until false; 

º~ ¸ÚÁø ¾Ë°í¸®ÁòÀÌ ¾Æ´Ò¼ö ¾ø½À´Ï´Ù¿ä. ÇãÇãÇã,,,±×·³ ´ÙÀ½ ³»¿ëÀ¸·Î ½º¸Ö½º¸Ö ³Ñ¾î°¡±â Àü¿¡ ¾Ë°í¸®Áò ºÐ¼® Çѹø Çغ¾½Ã´Ù.

Á¦ÀϸÕÀú, ¿©·¯ºÐµéÀÌ Çò°¥¸®´Â°ÍÀ» ¹Ì¿¬¿¡ ¹æÁöÇϱâ À§ÇÏ¿© ¸ðµç ÇÁ·Î¼¼½ºµéÀº º» ¾Ë°í¸®ÁòÀ» ÀÚ½ÅÀÇ ³»ºÎ¿¡ ³»ÀåÇÏ°í ÀÖ´Ù´Â ÀüÁ¦À̸ç, Á¦ 3ÀÚ°¡ º» ¾Ë°í¸®ÁòµéÀ» ÅëÇØ °¢ ÇÁ·Î¼¼½ºµéÀ» ÅëÁ¦ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °¢°¢ÀÇ ÇÁ·Î¼¼½ºµéÀÌ ÁÖü°¡ µÇ¾î º» ¾Ë°í¸®ÁòÀ» ÀÌ¿ëÇؼ­ ÀÚ½ÅÀÌ CS¿¡ µé¾î°¡¾ßÇÒÁö, ¾Æ´Ï¸é ´õ ±â´Ù·Á¾ß ÇÒÁö¸¦ °áÁ¤ÇÑ´Ù´Â »ç½ÇÀÔ´Ï´Ù.

ÀÏ´Ü, CS¿¡ µé¾î°¥ Áغñ°¡ µÈ ¼ø°£ ÇÁ·Î¼¼½º i´Â i¹ø° ¹øȣǥ¸¦ ºÎ¿©¹Þ½À´Ï´Ù(À̶§ i´Â ÇÁ·Î¼¼½º ÀÚ½ÅÀÇ ¹øÈ£À̱⵵ ÇÕ´Ï´Ù). ¹Ù·Î number[i]¿¡ ºÎ¿©¹ÞÀº ¹øÈ£°¡ µé¾î°¡°Ô µÇ´Âµ¥, Àߺ¸½Ã¸é ³¡¿¡ "+1"ÀÌ ÀÖ½À´Ï´Ù. ±×·¸ÁÒ, ÇöÀç ´ë±âÁßÀÎ °¡Àå Å« ¹øÈ£º¸´Ù ÇÑ°³°¡ ´õ Å« ¹øÈ£°¡ ¹øȣǥ¿¡ ±âÀçµË´Ï´Ù. ¶Ç º¸½Ã¸é ¾Ë°ÚÁö¸¸ CSµ¹ÀÔ Áغñ°¡ ³¡³ª°í ¹øÈ£¸¦ ¹Þ´Â ¼ø°£ choosing[i]Àº Âü°ªÀÌ µÈ´Ù´Â »ç½Ç¿¡¼­, ´Ù¸¥ ÇÁ·Î¼¼½º(CS µ¹ÀÔ Áغñ¸¦ ³¡³»°í ´ë±âÁßÀÎ)µé ¿ª½Ã for ·çÇÁ³»¿¡¼­ ¸ðÁ¾ÀÇ À½¸ð¸¦ ²Ù¹Ì´Ù°¡ ¾î¶² ÇÁ·Î¼¼½º°¡ CSµ¹ÀÔÀ» À§ÇÑ ¹øȣǥ¸¦ ¹ÞÀ»¶§¸é ¸ðµç°ÍÀ» ¾ö¼÷ÇÏ°Ô Áß´ÜÇÏ°í ¹øȣǥ¸¦ ¹Þ´Â ÇÁ·Î¼¼½º¸¦ ÁÖ½ÃÇÏ°Ô µÇÁö¿ä. »õ·Î¿î ÇÁ·Î¼¼½ºÀÇ ¹øȣǥ¿¡ ¹øÈ£°¡ ±âÀç‰çÀ½À» È®ÀÎÇÑ ´ÙÀ½¿¡¾ß ºñ·Î¼­ ´Ù½Ã for ·çÇÁ´Â µ¹¾Æ°©´Ï´Ù. ¾Æ, ¼­·Î¸¦ Á¸ÁßÇØÁÖ´Â Á¤¸» ¹Ù¶÷Á÷ÇÑ ¾Ë°í¸®ÁòÀ̾ß,,,

for ·çÇÁ ³»ºÎ¸¦ Çѹø º¾½Ã´Ù. ¸ÕÀú for ·çÇÁ´Â 0ºÎÅÍ n-1°³ ±îÁö, Áï ÃÑ n°³ÀÇ ¹øȣǥ number[]¸¦ Â÷·Ê·Î ÈÈ¾î º¸¸é¼­ °¢ ¹øȣǥ¿¡ ¹øÈ£°¡ »õ°ÜÁ®ÀÖ´ÂÁö¸¦ È®ÀÎÇÏ°Ô µÇ¿ä. 0Àº ¾Æ¹« ¹øÈ£µµ ±âÀçµÇ¾îÀÖÁö ¾Ê´Ù´Â ¶æÀÌÁÒ. À̶§ ÇØ´ç ¹øÈ£ÀÇ ÇÁ·Î¼¼½ºµéÀº CS µ¹ÀÔ¿¡ ´ëÇÑ Àǻ簡 ¾ø´Â ÇÁ·Î¼¼½ºµéÀÔ´Ï´Ù. ±×·¡¼­ ¸ðµÎ 0À̸é for loop¸¦ À¯À¯ÀÚÀûÇÏ°Ô ºüÁ®³ª¿Í CS¿¡ µ¹ÀÔÇÏ°Ô µÇ°ÚÁÒ. Ç㳪, ´©±º°¡ÀÇ ¹øȣǥ°¡ 0ÀÌ ¾Æ´Ô°ú µ¿½Ã¿¡(´©±º°¡ CSµ¹ÀÔÀ» ½ÅûÇß±º¿ä) ÀÌ°ÍÀÌ ÀÚ½ÅÀÇ ¹øȣǥº¸´Ù ÀÛÀº °ªÀÎÁö¸¦ È®ÀÎÇÏÁÒ. ¸¸ÀÏ ÀÛÀº °ªÀ̰ųª °ªÀÌ °°´õ¶óµµ ÇÁ·Î¼¼½º ¹øÈ£°¡(¹øȣǥÀÇ ¹øÈ£¿Í ÇÁ·Î¼¼½º ¹øÈ£´Â ´Ù¸£´Ù´Â°ÍÀ» ÁÖÁöÇϽñæ) Àڽź¸´Ù ÀÛ´Ù¸é ±×³É ·çÇÁ´Â µ¹¾Æ°£´Ù´Â »ç½Ç¿¡¼­ ¾ÆÁ÷ ÀÚ½ÅÀº CS¿¡ µé¾î°¥¶§°¡ ¾Æ´Ï¶ó´Â °ÍÀ» ¾Ë°Ô µË´Ï´Ù.

¸¸ÀÏ À§ÀÇ °æ¿ì°¡ ¾Æ´Ï¶ó¸é ÀÚ½ÅÀÇ ¹øȣǥ ¹øÈ£°¡ °¡Àå À۰ųª ¹øȣǥ ¹øÈ£°¡ °°´õ¶óµµ ÇÁ·Î¼¼½º ¹øÈ£°¡ ÀÚ½ÅÀÌ °¡Àå ÀÛÀº °æ¿ìÀ̹ǷΠ±â³É~ ·çÇÁ¿¡¼­ ¹þ¾î³ª¸é¼­ CS·Î ¼ï~ µé¾î°¡´Â ±âµæ±ÇÀ» ¾ò°Ô µË´Ï´Ù.

ÀÌ ¾Ë°í¸®Áò¿¡¼­ ¹øȣǥÀÇ ¹øÈ£¿Í ÇÁ·Î¼¼½º ¹øÈ£¸¦ °¢°¢ °í·ÁÇÏ´Â ÀÌÀ¯´Â º¸½Ã¸é ¾Ë°ÚÁö¸¸ °øÅë µ¥ÀÌÅÍ ½ºÆ®·°ÃÄÀÎ ¹è¿­µé(¹Ù·Î choosing[]°ú number[]) ÀÚüµµ CS¹®Á¦¸¦ ¾È°í Àֱ⿡ µ¿½Ã¿¡ µÎ ÇÁ·Î¼¼½º°¡ CSµ¹ÀÔ Áغñ¸¦ Çϸ鼭 ¹øȣǥ¿¡ ¶È°°Àº ¹øÈ£¸¦ ¹Þ´Â °æ¿ì°¡ ¹ß»ýÇÒ¼ö ÀÖ¾î¿ä!!!(+1À» ÇÑÂü ÇÏ·Á´Â ¿ÍÁß¿¡ ¶Ç ´Ù¸¥ ÇÁ·Î¼¼½º°¡ CSµ¹ÀÔÀ» Áغñ Çعö¸®¸é ¾÷µ¥ÀÌÆ® µÇ±âµµ Àü¿¡ ¹øȣǥ¸¦ °°ÀÌ ºÎ¿©¹Þ´Â °æ¿ìÀÌÁÒ) °í·Î ±× °æ¿ì¿¡ ´ëÇÑ ÇØ°áÃ¥À¸·Î½á ¸¸ÀÏ µÎ ¹øȣǥÀÇ ³»¿ëÀÌ °°´Ù¸é!? ±×¶§´Â ÇÁ·Î¼¼½ºÀÇ °íÀ¯ ¹øÈ£¸¦ ºñ±³ÇÏ°Ô µÇ°í, °á±¹ ÇÁ·Î¼¼½º ¹øÈ£°¡ ³·Àº ³à¼®ÀÌ ±âµæ±ÇÀ» Áã°Ô µË´Ï´Ù. ¸ÚÁöÁÒ?!

CS¿¡¼­ ÀÏÀ» ÇØ°áÇÏ°í ³ª¿À¸é¼­ ÀÚ½ÅÀÌ ºÎ¿©¹ÞÀº ¹øȣǥÀÇ ³»¿ëÀ» 0À¸·Î ´Ù½Ã ÃʱâÈ­ ½ÃÅ´À¸·Î½á ´Ù¸¥ »ç¶÷µéÀÌ ÇÁ·Î¼¼½ºµéÀÌ CS¿¡ µ¹ÀÔÇÒ¼ö ÀÖµµ·Ï ¹è·Á¸¦ ÇØÁÖ°Ô µË´Ï´Ù. ±×¸®°í ³ª¼­ ¿©À¯¸¦ °¡Áö°í RS¿¡¼­ ÀÚ±â ÇÏ°íÇÂÀÏ °è¼Ó ÇÏ°Ô µÇÁö¿ä. º£ÀÌÄ¿¸® ¾Ë°í¸®ÁòÀº À§¿¡ Á¦½ÃÇÑ 3°¡Áö Á¶°ÇÀ» ¸ðµÎ ¸¸Á·ÇÕ´Ï´Ù. ±×¸®°í ±×°Í¿¡ ´ëÇÑ Áõ¸íÀ» ±³°ú¼­´Â ¾â¹Ó°Ôµµ ¹®Á¦ 6.2¸¦ À§Çؼ­ ÀϺη¯ ÇÏÁö ¾Ê¾Ò´Ù°í »·»·½º·¹ ¸»À» ÇÕ´Ï´Ù. ±×·¯´Ï ¿©·¯ºÐµéÀÌ ½º½º·Î ¾ÈÇغ¸½Å´Ù°í Àú´Â ºñ³­ÇÏÁö ¾Ê½À´Ï´Ù.

´ÙÀ½ Àå¿¡¼­´Â ±×·¸´Ù¸é ¸Å¹ø ÀÌ·±½ÄÀ¸·Î °ñÄ¡¾ÆÇ ÀåÄ¡¸¦ ÇÁ·Î¼¼½º¸¶´Ù ºÎ°úÇØÁÖ¾î¾ßÇϴ°¡¿¡´ëÇÑ È¸ÀǸ¦ Çϵå¿þ¾îÀûÀ¸·Î ÇØ°áÇØÁÖ´Â ¼¼¸¶Æ÷¾î(Semaphore)¿¡ ´ëÇؼ­ À̾߱â Çغ¼±î ÇÕ´Ï´Ù. ÀÏ´Ü ²Ï °ñÄ¡¾ÆÇ »êÀ» ³Ñ¾úÀ¸´Ï Ãà¹èÀÇ ¸ÆÁÖ¶óµµ ÇÑÀÜ ÇϽÉÀÌ ¾î¶³±î¿ä? :)

-duffer °æÁØ (http://vorlon.cwru.edu/~kxm73)