Àá±Ý

½Ã½ºÅÛ¿¡ ÀÖ´Â ´ÙÁß ÀÛ¾÷ÀÌ µ¿ÀÏÇÑ ¿ÀºêÁ§Æ®¿¡ ¾×¼¼½ºÇÏ¿© ÀÌ ¿ÀºêÁ§Æ®¸¦ Á¶ÀÛÇØ¾ß ÇÒ ¼ö ÀÖ½À´Ï´Ù. ILockÀº °øÀ¯ ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ µ¶Á¡ ¾×¼¼½º¸¦ ºÎ¿©ÇÏ´Â ÇÁ·ÎÅäÄÝÀ» Á¤ÀÇÇÕ´Ï´Ù. ÀÛ¾÷ÀÌ °øÀ¯ ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ ¾×¼¼½º°¡ ÇÊ¿äÇϸé ÀÌ ÀÛ¾÷Àº ÇØ´ç ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ Àá±ÝÀ» È®º¸ÇÕ´Ï´Ù. ¿ÀºêÁ§Æ®ÀÇ Á¶ÀÛÀ» ¿Ï·áÇϸé ÀÛ¾÷ÀÌ Àá±ÝÀ» ÇØÁ¦ÇÕ´Ï´Ù.

Àá±ÝÀº ÀϹÝÀûÀ¸·Î °øÀ¯ ¿ÀºêÁ§Æ®°¡ ÀÛ¼ºµÇ°Å³ª Ç÷¯±×ÀÎÀÌ ÀÌ ¿ÀºêÁ§Æ®¿¡ óÀ½À¸·Î ¾×¼¼½ºÇÒ ¶§ ÀÛ¼ºµË´Ï´Ù. Áï, °øÀ¯ ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ ÂüÁ¶°¡ ÀÖ´Â Äڵ忡µµ ÇØ´ç Àá±Ý¿¡ ´ëÇÑ ÂüÁ¶°¡ ÀÖ½À´Ï´Ù. ´ÙÀ½°ú °°ÀÌ myObject¿¡ ´ëÇÑ ¾×¼¼½º¸¦ Á¦¾îÇÏ´Â µ¥ »ç¿ëµÇ´Â Àá±ÝÀÎ myLockÀ» ÀÛ¼ºÇÏ¿© ¼³¸íÀ» ½ÃÀÛÇÕ´Ï´Ù.

   ...
   myObject = initializeImportantObject();
   IJobManager jobMan = Platform.getJobManager();
   myLock = jobMan.newLock();
   ...
ILock¿¡ ´ëÇÑ °­·ÂÇÑ ±¸ÇöÀÌ Ç÷§Æû¿¡ ÀÇÇØ Á¦°øµË´Ï´Ù. ÀÛ¾÷ °ü¸®Àڴ Ŭ¶óÀÌ¾ðÆ®°¡ »ç¿ëÇϵµ·Ï ÀÌ Àá±Ý¿¡ ´ëÇÑ ÀνºÅϽº¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Àá±ÝÀº °¢°¢ÀÌ ¼­·Î Àß ¾Ë°í ÀÖÀ¸¹Ç·Î ¼øÈ¯ ±³Âø »óŸ¦ ¹æÁöÇÒ ¼ö ÀÖ½À´Ï´Ù. (´ÙÀ½¿¡ ÇØ´ç ¸í·É¹®¿¡ ´ëÇØ ÀÚ¼¼È÷ ´Ù·ç±â·Î ÇÕ´Ï´Ù.)

ÀÛ¾÷ÀÇ Äڵ忡 myObject¿¡ ´ëÇÑ ¾×¼¼½º°¡ ÇÊ¿äÇÒ ¶§¸¶´Ù ¸ÕÀú ÀÛ¾÷¿¡ ´ëÇÑ Àá±ÝÀ» È®º¸ÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½ ½º´ÏÆêÀº Àá±Ý¿¡ ´ëÇÑ °øÅë ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù.

...
// I need to manipulate myObject, so I get its lock first.
         try {
	myLock.acquire();
	updateState(myObject);  // manipulate the object
        } finally {
	lock.release();
}
...
acquire() ¸Þ¼Òµå´Â È£Ãâ ÀÛ¾÷¿¡ ÇØ´ç Àá±Ý¿¡ ´ëÇÑ µ¶Á¡ ¾×¼¼½º°¡ ºÎ¿©µÉ ¼ö ÀÖÀ» ¶§±îÁö ¸®ÅϵÇÁö ¾Ê½À´Ï´Ù. Áï, ÀϺΠ´Ù¸¥ ÀÛ¾÷ÀÌ ÀÌ¹Ì Àá±ÝÀ» È®º¸ÇßÀ¸¸é ÀÌ ÄÚµå´Â Àá±ÝÀÌ »ç¿ë °¡´ÉÇÒ ¶§±îÁö Â÷´ÜµË´Ï´Ù. ¿ÀºêÁ§Æ®¿¡ ´ëÇØ ÀÛ¾÷ ÁßÀÎ µ¿¾È ¿¹¿Ü°¡ ¹ß»ýÇÒ °æ¿ì Àá±ÝÀ» ÇØÁ¦ÇÒ ¼ö ÀÖµµ·Ï Àá±ÝÀ» È®º¸Çϰí myObject¸¦ Á¶ÀÛÇÏ´Â ÄÚµå´Â try ºí·Ï¿¡¼­ ·¦Çε˴ϴÙ.

¾ÆÁÖ ´Ü¼øÇØ º¸ÀÌÁö ¾Ê½À´Ï±î? ´ÙÇàÈ÷µµ Àá±ÝÀº »ç¿ëÇϱⰡ ¾ÆÁÖ °£´ÜÇÕ´Ï´Ù. ¶ÇÇÑ Àá±ÝÀº ÀçÀÔ·ÂÀÌ °¡´ÉÇѵ¥, À̰ÍÀº µ¿ÀÏÇÑ Àá±ÝÀ» ¿©·¯ ¹ø È®º¸ÇÏ´Â ÀÛ¾÷¿¡ ´ëÇØ °ÆÁ¤ÇÒ Çʿ䰡 ¾øÀ½À» ÀǹÌÇÕ´Ï´Ù. °¢ Àá±ÝÀº ƯÁ¤ ½º·¹µåÀÇ È®º¸ ¹× ÇØÁ¦ °è¼ö¸¦ º¸°üÇϸç, ÇØÁ¦ ¼ö°¡ È®º¸ ¼ö¿Í °°À» ¶§ ÇϳªÀÇ ÀÛ¾÷¿¡¼­¸¸ ÇØÁ¦µË´Ï´Ù.

±³Âø »óÅÂ

¾Õ¿¡¼­ ÀÛ¾÷ °ü¸®ÀÚ°¡ Á¦°øÇÏ´Â Àá±ÝÀº °¢°¢ ¼­·Î Àß ¾Ë°í ÀÖÀ¸¹Ç·Î ¼øÈ¯ ±³Âø »óŸ¦ ¹æÁöÇÒ ¼ö ÀÖÀ½À» »ìÆì ºÃ½À´Ï´Ù. ¾î¶»°Ô ±³Âø »óŰ¡ ¹ß»ýÇÏ´ÂÁö¸¦ ÀÌÇØÇϱâ À§ÇØ ´Ü¼ø ½Ã³ª¸®¿À¸¦ »ìÆì º¸±â·Î ÇÕ´Ï´Ù. "ÀÛ¾÷ A"°¡ "Àá±Ý A"¸¦ È®º¸Çϰí À̾ "Àá±Ý B"¸¦ È®º¸ÇÏ·Á°í ½ÃµµÇÑ´Ù°í °¡Á¤ÇÕ´Ï´Ù. ÇÑÆí "Àá±Ý B"´Â "Àá±Ý A"¿¡¼­ ´ë±â ÁßÀÎ ÇöÀç Â÷´ÜµÈ "ÀÛ¾÷ B"¿¡¼­ º¸À¯ÇÕ´Ï´Ù. ÀÌ ±³Âø »óÅ À¯ÇüÀº ¿©·¯ ÀÛ¾÷ »çÀÌ¿¡¼­ Àá±ÝÀ» »ç¿ëÇÒ ¶§ ¹ß»ýÇÏ´Â ±âº» ¼³°è ¹®Á¦¸¦ Ç¥½ÃÇÕ´Ï´Ù. ÀÌ ´Ü¼ø ¹®Á¦´Â ½±°Ô ¹æÁöÇÒ ¼ö ÀÖÁö¸¸ ¿ì¿¬ÇÑ ±³Âø »óÅÂÀÇ ¹ß»ý °¡´É¼ºÀº ¼³°è¿¡¼­ »ç¿ëµÇ´Â ÀÛ¾÷ ¹× Àá±Ý ¼ö°¡ Áõ°¡ÇÒ¼ö·Ï ´Ã¾î³³´Ï´Ù.

´ÙÇàÈ÷ Ç÷§ÆûÀº »ç¿ëÀÚ°¡ ±³Âø »óŸ¦ ½Äº°ÇÏ´Â µ¥ µµ¿òÀÌ µË´Ï´Ù. ÀÛ¾÷ °ü¸®ÀÚ°¡ ±³Âø »óÅ Á¶°ÇÀ» ¹ß°ßÇϸé ÀÛ¾÷ °ü¸®ÀÚ´Â ±³Âø »óÅ Á¶°ÇÀ» ¼³¸íÇÏ´Â ·Î±×¿¡ Áø´Ü Á¤º¸¸¦ ÀμâÇÕ´Ï´Ù. ±×·± ´ÙÀ½ Â÷´ÜµÈ ÀÛ¾÷¿¡¼­ ¼ÒÀ¯ÇÏ´Â Àá±Ý¿¡ ´ëÇÑ ¾×¼¼½º¸¦ ´ë±â ÁßÀÎ ±âŸ ÀÛ¾÷¿¡ ÀϽÃÀûÀ¸·Î ºÎ¿©ÇÏ¿© ±³Âø »óŸ¦ Áß´ÜÇÕ´Ï´Ù. ´ÙÁß Àá±Ý°ú °ü·ÃµÈ ±¸ÇöÀ» Á¶½É½º·´°Ô Å×½ºÆ®Çϰí Ç÷§Æû¿¡¼­ º¸°íÇÏ´Â ¸ðµç ±³Âø »óÅ Á¶°ÇÀ» ¼öÁ¤ÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù.

¹ýÀû ÁÖÀÇ»çÇ×