org.wegra.thread
Class ConditionVariable

java.lang.Object
  extended byorg.wegra.thread.Lock
      extended byorg.wegra.thread.ConditionVariable
All Implemented Interfaces:
Condition

public class ConditionVariable
extends org.wegra.thread.Lock
implements Condition

ÀÌ Å¬·¡½º´Â "Á¶°Ç º¯¼ö"¸¦ °£´ÜÇÏ°Ô ±¸ÇöÇØ ³õÀº Ŭ·¡½ºÀÌ´Ù. "Á¶°Ç º¯¼ö"´Â ¾î¶² Á¶°ÇÀÌ ¸¸Á·µÇ´Â °æ¿ì¿¡¸¸ ½º·¹µå°¡ ±â´Ù¸®µµ·Ï Çϱâ À§ÇÑ °ÍÀ¸·Î ¸¸¾à Á¶°ÇÀÌ ¸¸Á·µÇÁö ¾Ê¾Ò´Ù¸é ½º·¹µå´Â ºí·ÏÅ· µÇÁö ¾Ê´Â´Ù. "Á¶°Ç º¯¼ö"¸¦ »ç¿ëÇϸ鼭´Â ÁßøµÈ ¸ð´ÏÅÍ¿¡ ÀÇÇØ¼­ ³ªÅ¸³¯ ¼ö ÀÖ´Â ±³Âø »óŸ¦ Á¶½ÉÇØ¾ß ÇÑ´Ù.

	class Lockout {
		ConditionVariable fCondition = new ConditionVariable(false);

		synchronized void f() {
			// do work
			fCondition.waitFotTure();
		}

		synchronized void set() {	// f()¿¡¼­ ´Ù¸¥ ½º·¹µå°¡ ºí·ÏÅ· µÇ¾îÀÖ´Â
			fCondition.setCondition(true);	// ±³Âø »óŰ¡ ÀϾ´Ù.
		}
	}
 
À§ÀÇ Äڵ忡¼­´Â ¾î¶² ½º·¹µå°¡ ¤©()·Î ÁøÀÔÇØ¼­ ¸ð´ÏÅ͸¦ ¾òÀº ´ÙÀ½ Á¶°Ç º¯¼ö°¡ ÂüÀÌ µÉ ¶§±îÁö ±â´Ù¸± ¼ö ÀÖ´Ù. ÀÌ ¶§ ¸ð´ÏÅÍÀÇ ¶ôÀ» ³õ´Â °ÍÀº ¾Æ´Ï¶ó´Â °Í¿¡ À¯ÀÇÇØ¾ß ÇÑ´Ù. (À§ÀÇ Äڵ忡¼­ fCondition ÀÌ ÂüÀÌ µÇ´Â °æ¿ì´Â ¿ÀÁ÷ set() À» È£ÃâÇÏ´Â ¹æ¹ý ¹Û¿¡ ¾ø´Ù. ÇÏÁö¸¸ set() À» È£ÃâÇßÀ» °æ¿ì ÀÌ¹Ì f() ¸¦ È£ÃâÇÑ ½º·¹µå¿¡¼­ ¸ð´ÏÅ͸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î ºí·ÏÅ· µÇ°Ô µÈ´Ù. °á·ÐÀûÀ¸·Î, À§ÀÇ Äڵ忡¼­´Â ÁßøµÈ ¸ð´ÏÅÍ¿¡ ÀÇÇÑ ±³Âø »óŰ¡ ³ªÅ¸³¯ ¼ö ÀÖ´Ù) À§ÀÇ ¹®Á¦¸¦ Ç®±â À§Çؼ­´Â Á¶°Ç º¯¼ö°¡ ÂüÀÌ µÇ±æ ±â´Ù¸®´Â ÄÚµå ÀÌÀü¿¡ ¸ð´ÏÅ͸¦ ³õ¾Æ ÁÖ¾î¾ß ÇÑ´Ù.
	class Okay {
		ConditionVariable fCondition = new ConditionVariable(false);

		void f() {
			synchronized( this ) {
				// do work
			}
			fCondition.waitForTrue();
		}
		synchronized void set() {
			fCondition.setCondition(true);
		}
	}
 
¾Æ´Ï¸é set() ¸Þ¼Òµå¸¦ Åë±âÈ­ ÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù.
	class Okay {
		ConditionVariable fCondition = new ConditionVariable(false);
		synchronized void f() {
			// do work
			fCondition.waitForAll();
		}

		void set() {
			fCondition.waitForTure();
		}
	}
 
ÀϹÝÀûÀÎ wait() , notify ¹æ½Ä¿¡¼­´Â wait() °¡ ºí·ÏÅ· µÇÁö Àü¿¡ ¸ð´ÏÅ͸¦ ³õ¾ÆÁֱ⠶§¹®¿¡ ÀÌ¿Í °°Àº ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ¸ðµç °æ¿ì ¾µ ¼ö ÀÖ´Â °Ç ¾Æ´Ï´Ù.

Version:
1.0 (2001-07-26)
Author:
wegra (Bok-Youn Lee)

Constructor Summary
ConditionVariable()
          Ãʱâ Á¶°ÇÀÌ °ÅÁþ »óÅÂÀÎ Á¶°Çº¯¼ö¸¦ »ý¼ºÇÑ´Ù.
ConditionVariable(boolean condition)
          Æ¯Á¤ »óÅÂÀÇ Á¶°Ç º¯¼ö¸¦ »ý¼ºÇÑ´Ù.
 
Method Summary
 boolean acquire(long timeout)
          Semaphore ±¸ÇöÀ» À§ÇÑ ¸Þ¼Òµå waitForTrue(long)¿Í µ¿ÀÏ
 void awake()
          ºí·ÏÅ· µÇ¾îÀÖ´Â ½º·¹µå Áß Çϳª¸¦ ±ú¿î´Ù.
 void awakeAll()
          ¸ðµç ºí·ÏÅ· ½º·¹µå¸¦ ±ú¿î´Ù.
 int getID()
          ÇØ´ç ¼¼¸¶Æ÷¾î °´Ã¤ÀÇ °íÀ¯ ID¸¦ ¹Ýȯ
 boolean isSatisfied()
          Á¶°Ç º¯¼ö°¡ ÂüÀÏ °æ¿ì¿¡ true¸¦ ¹ÝȯÇÑ´Ù.
 void release()
          Semaphore ±¸ÇöÀ» À§ÇÑ Å¬·¡½º setCondition(boolean)¿Í µ¿ÀÏ
 void setCondition(boolean condition)
          Á¶°ÇÀ» ÁÖ¾îÁø »óÅ·ΠÀç¼³Á¤ÇÑ´Ù.
 boolean waitForTrue()
          Á¶°ÇÀÌ ÂüÀ¸·Î µÉ ¶§±îÁö ´ë±âÇÑ´Ù(ÀáÀçÀûÀ¸·Î ¿µ¿øÈ÷ ±â´Ù¸± ¼öµµ ÀÖ´Ù).
 boolean waitForTrue(long timeout)
          Á¶°ÇÀÌ ÂüÀÌ µÉ ¶§±îÁö ±â´Ù¸°´Ù.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConditionVariable

public ConditionVariable()
Ãʱâ Á¶°ÇÀÌ °ÅÁþ »óÅÂÀÎ Á¶°Çº¯¼ö¸¦ »ý¼ºÇÑ´Ù.


ConditionVariable

public ConditionVariable(boolean condition)
ƯÁ¤ »óÅÂÀÇ Á¶°Ç º¯¼ö¸¦ »ý¼ºÇÑ´Ù.

Method Detail

acquire

public boolean acquire(long timeout)
                throws java.lang.InterruptedException,
                       TimeoutException,
                       java.lang.IllegalArgumentException
Semaphore ±¸ÇöÀ» À§ÇÑ ¸Þ¼Òµå waitForTrue(long)¿Í µ¿ÀÏ

Returns:
¸¸¾à ŸÀӾƿô °ªÀÌ 0ÀÌ°í ¶ôÀ» ¾òÀ» ¼ö ¾ø¾úÀ» °æ¿ì false¸¦ ¹ÝȯÇÏ¸ç ±× ¿ÜÀÇ °æ¿ì true¸¦ ¹ÝȯÇÑ´Ù.
Throws:
TimeoutException - ¼¼¸¶Æ÷¾î°¡ ¾ò¾îÁö±â Àü¿¡ ŸÀӾƿôÀÌ ´Ù Áö³ª°£ °æ¿ì.
java.lang.InterruptedException - ´Ù¸¥ ½º·¹µå¿¡ ÀÇÇØ¼­ ¶ôÀ» ¾ò´Â °ÍÀÌ ÀÎÅÍ·´Æ® µÇ¾úÀ» °æ¿ì.
java.lang.IllegalArgumentException

awake

public final void awake()
ºí·ÏÅ· µÇ¾îÀÖ´Â ½º·¹µå Áß Çϳª¸¦ ±ú¿î´Ù. (³»ºÎÀûÀ¸·Î ´ÜÁö notify() ¸Þ¼Òµå¸¦ È£ÃâÇÒ »ÓÀ̳ª µ¿±âÈ­µÇ¾î ÀÖ´Ù´Â Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù)


awakeAll

public final void awakeAll()
¸ðµç ºí·ÏÅ· ½º·¹µå¸¦ ±ú¿î´Ù. ÀÌ ¸Þ¼Òµå´Â ÀÚ¹Ù ¿ø·¡ÀÇ wait / notify ó·³ ÇöÀç »óÅÂ¿Í °ü°è¾øÀÌ Á¦¾îÇÏ°í ½ÍÀ» ¶§ »ç¿ëÇÑ´Ù. ÀÌ ¸Þ¼Òµå¸¦ ÅëÇØ ±ú¾î³ª´Â ½º·¹µå´Â ÀÌ¹Ì ºí·ÏÅ· µÇ¾îÀÖ´ø ½º·¹µåµé·Î ÇÑÁ¤µÇ¸ç ÀÌ ¸Þ¼Òµå È£Ãâ ÈÄ¿¡µµ ¿©ÀüÈ÷ Á¶°Ç¿¡ µû¶ó ´Ù½Ã ºí·ÏÅ· µÉ ¼ö ÀÖ´Ù. (³»ºÎÀûÀ¸·Î ´ÜÁö notifyAll() ¸Þ¼Òµå¸¦ È£ÃâÇÒ »ÓÀ̳ª µ¿±âÈ­µÇ¾î ÀÖ´Ù´Â Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù)


isSatisfied

public final boolean isSatisfied()
Á¶°Ç º¯¼ö°¡ ÂüÀÏ °æ¿ì¿¡ true¸¦ ¹ÝȯÇÑ´Ù. ÀÌ ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °ÍÀº ÀáÀçÀûÀ¸·Î À§ÇèÇÒ ¼ö Àִµ¥ ÀÌ ¸Þ¼Òµå È£Ãâ ÈÄ Á¶°Ç º¯¼ö´Â ¾ðÁ¦¶óµµ º¯ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

Specified by:
isSatisfied in interface Condition

release

public void release()
Semaphore ±¸ÇöÀ» À§ÇÑ Å¬·¡½º setCondition(boolean)¿Í µ¿ÀÏ


setCondition

public void setCondition(boolean condition)
Á¶°ÇÀ» ÁÖ¾îÁø »óÅ·ΠÀç¼³Á¤ÇÑ´Ù. »õ·Î¿î »óŰ¡ 'true'À̶ó¸é ºí·ÏÅ·µÇ¾î ÀÖ´Â ½º·¹µåµéÀ» ±ú¿öÁØ´Ù.


waitForTrue

public final boolean waitForTrue()
                          throws java.lang.InterruptedException
Á¶°ÇÀÌ ÂüÀ¸·Î µÉ ¶§±îÁö ´ë±âÇÑ´Ù(ÀáÀçÀûÀ¸·Î ¿µ¿øÈ÷ ±â´Ù¸± ¼öµµ ÀÖ´Ù). ÀÌ ¸Þ¼Òµå´Â waitForTure(Semaphore.TIMEOUT_FOREVER); ¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù ¾ÆÁÖ Á¶±ÝÀ̳ª¸¶ ´õ È¿À²ÀûÀÌ´Ù.

Throws:
java.lang.InterruptedException

waitForTrue

public final boolean waitForTrue(long timeout)
                          throws java.lang.InterruptedException,
                                 TimeoutException,
                                 java.lang.IllegalArgumentException
Á¶°ÇÀÌ ÂüÀÌ µÉ ¶§±îÁö ±â´Ù¸°´Ù.

Parameters:
timeout - ¹Ð¸®ÃÊ ´ÜÀ§, 0ÀÌ ÁÖ¾îÁö¸é °ð¹Ù·Î ¹ÝȯÇÑ´Ù.
Returns:
timeoutÀÌ 0À¸·Î ÁÖ¾îÁö°í Á¶°ÇÀÌ °ÅÁþÀÎ °æ¿ì false¸¦ ¹Ýȯ ±× ¿ÜÀÇ °æ¿ì true¸¦ ¹ÝȯÇÑ´Ù.
Throws:
java.lang.InterruptedException
TimeoutException
java.lang.IllegalArgumentException

getID

public final int getID()
ÇØ´ç ¼¼¸¶Æ÷¾î °´Ã¤ÀÇ °íÀ¯ ID¸¦ ¹Ýȯ

Returns:
°íÀ¯ ID