org.wegra.thread
Class Semaphore

java.lang.Object
  extended byorg.wegra.thread.Lock
      extended byorg.wegra.thread.Semaphore

public final class Semaphore
extends org.wegra.thread.Lock

ÀϹÝÀûÀÎ ¼¼¸¶Æ÷¾î¸¦ ±¸ÇöÇÑ´Ù. ¹èŸÀû ¼¼¸¶Æ÷¾î´Â Mutex¶ó´Â º°µµÀÇ Å¬·¡½º·Î Á¦°øµÇ¸ç ÀÌ Å¬·¡½ºÀÇ ÀνºÅϽº´Â ÀϹÝÀûÀ¸·Î Ä«¿îÆÃ ¼¼¸¶Æ÷¾îÀÇ ¿ªÇÒÀ» ¼öÇàÇÑ´Ù.

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

Constructor Summary
Semaphore()
          Semaphore constructor comment.
 
Method Summary
 boolean acquire(long timeout)
          ¼¼¸¶Æ÷¾î¸¦ ¾ò´Â´Ù.
 boolean acquireAll(int number, long timeout)
          ÁöÁ¤µÈ °³¼öÀÇ ½½·ÔÀ» ¾ò´Â´Ù.
 int getID()
          ÇØ´ç ¼¼¸¶Æ÷¾î °´Ã¤ÀÇ °íÀ¯ ID¸¦ ¹Ýȯ
 int getMaxSize()
          ÇöÀç Ç®ÀÇ Å©±â¸¦ ¹ÝȯÇÑ´Ù.
 void increaseMaxSlots(int number)
          ÃÖ´ë Ç®ÀÇ Å©±â¸¦ number ¸¸Å­ ´Ã¸°´Ù.
 void release()
          ¼¼¸¶Æ÷¾î¸¦ ³õ¾ÆÁÖ°í Ä«¿îÆ®¸¦ Áõ°¡½ÃŲ´Ù.
 int release(int number)
          ¼¼¸¶Æ÷¾îÀÇ ½½·ÔÀ» ÇÑ ¹ø¿¡ "number"¸¸Å­ ³õ´Â´Ù.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Semaphore

public Semaphore()
Semaphore constructor comment.

Method Detail

acquire

public boolean acquire(long timeout)
                throws java.lang.InterruptedException,
                       TimeoutException,
                       java.lang.IllegalArgumentException
¼¼¸¶Æ÷¾î¸¦ ¾ò´Â´Ù. Áï, °¡´ÉÇÑ ½½·ÔÀÇ °³¼ö¸¦ °¨¼Ò½ÃŲ´Ù. ÀÌ ¶§ ½½·ÔÀÇ °³¼ö°¡ 0À̶ó¸é ºí·ÏÅ· µÈ´Ù. ¸¸¾à ÀÌ ¸Þ¼Òµå¸¦ È£ÃâÇØ¼­ ¸¶Áö¸· ½½·ÔÀ» ¾ò¾ú´Ù¸é »ý»ýÀÚ¿¡ ÁöÁ¤µÈ Runnable °´Ã¼ÀÇ run() ¸Þ¼Òµå È£ÃâµÈ´Ù. ÀÌ·± ¹æ½ÄÀ» »ç¿ëÇϸé Çʿ信 µû¶ó Ç®ÀÇ Å©¸®¸¦ ´Ã·ÁÁÙ ¼ö ÀÖ´Ù. (increaseMaxSlots(int) Âü°í)

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

acquireAll

public boolean acquireAll(int number,
                          long timeout)
                   throws java.lang.InterruptedException,
                          TimeoutException,
                          java.lang.IllegalArgumentException
ÁöÁ¤µÈ °³¼öÀÇ ½½·ÔÀ» ¾ò´Â´Ù. ¿©·¯°³ÀÇ ½½·ÔÀ» ÇѲ¨¹ø¿¡ ¾ò±â À§Çؼ­´Â LockManager.acquireAll() ¸¦ »ç¿ëÇÏ¸é µÈ´Ù. Áï, ÇϳªÀÇ Semaphore ¿¡ ´ëÇÑ ¿©·¯°³ÀÇ ÂüÁ¶ÀÚ¸¦ ´ãÀº ¹è¿­À» LockManagerÀÇ acquireAll() È£Ãâ¿¡ »ç¿ëÇÏ¸é µÈ´Ù.

Parameters:
timeout - ÇϳªÀÇ ½½·ÔÀ» ¾ò´Âµ¥ ±îÁö ±â´Ù¸± ÃÖ´ë½Ã°£(ms) µû¶ó¼­, ±â´Ù¸®´Âµ¥ °É¸± ¼ö ÀÖ´Â ÃÖ´ë½Ã°£Àº timeout * number ÀÌ´Ù.
Throws:
TimeoutException - ¸¸¾à ½½·ÔÀ»¾ò°íÀÚ ÇÒ ¶§ ŸÀӾƿôÀÌ ÀϾ´Ù¸é ¹ß»ý
java.lang.InterruptedException
java.lang.IllegalArgumentException

getMaxSize

public int getMaxSize()
ÇöÀç Ç®ÀÇ Å©±â¸¦ ¹ÝȯÇÑ´Ù.


increaseMaxSlots

public void increaseMaxSlots(int number)
ÃÖ´ë Ç®ÀÇ Å©±â¸¦ number ¸¸Å­ ´Ã¸°´Ù. ¸¸¾à »ç¿ë °¡´ÉÇÑ ½½·ÔÀÌ ¾ø´Â °æ¿ì¿´´Ù¸é ½½·ÔÀ» ¾ò±â À§ÇØ ±â´Ù¸®´Â ½º·¹µåµéÀº ±ú¾î³ª°Ô µÈ´Ù(»õ·Ó°Ô ÁöÁ¤µÈ ½½·Ô¸¶Àú ´Ù Âû¶§±îÁö). Áï, ÀÌ ¸Þ¼Òµå´Â ÇöÀç °¡´ÉÇÑ ½½·ÔÀÇ °³¼ö¸¦ ´Ã¸®°í release(number) ¸¦ È£ÃâÇÏ´Â °ÍÀÌ´Ù.

Parameters:
number - »õ·Ó°Ô Ãß°¡ÇÒ ½½·ÔÀÇ °³¼ö. ¸¸¾à 0 ÀÌÇÏÀÇ °ªÀ¸·Î ÁöÁ¤µÇ¸é IllegalArgumentException ÀÌ ¹ß»ýÇÑ´Ù.

release

public void release()
¼¼¸¶Æ÷¾î¸¦ ³õ¾ÆÁÖ°í Ä«¿îÆ®¸¦ Áõ°¡½ÃŲ´Ù. ÀÌ ¸Þ¼Òµå´Â ÀϹÝÀûÀÎ ¼¼¸¶Æ÷¾îÀÇ release()¸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù.

Throws:
OverflowException - ´õ ÀÌ»ó ³õ¾ÆÁÙ ¼¼¸¶Æ÷¾î°¡ ¾ø´Â »óÅ¿¡¼­ ¼¼¸¶Æ÷¾î¸¦ ³õ¾ÆÁÖ·Á ÇÏ´Â °æ¿ì

release

public int release(int number)
¼¼¸¶Æ÷¾îÀÇ ½½·ÔÀ» ÇÑ ¹ø¿¡ "number"¸¸Å­ ³õ´Â´Ù.

Parameters:
number - ³õ¾ÆÁÙ ½½·ÔÀÇ °³¼ö. ÀÌ °ªÀÌ 0 ÀÌÇÏÀ̸é IllegalArgumentExceptionÀÌ ¹ß»ýÇÑ´Ù.
Returns:
Áõ°¡°¡ ÀϾ ÀÌÈÄ »ç¿ë °¡´ÉÇÑ ½½·ÔÀÇ °³¼ö
Throws:
OverflowException - ÇöÀç »ç¿ëÁßÀÎ ½½·Ô °³¼ö + ³õ¾ÆÁÖ·Á´Â °³¼ö°¡ ÃÖ´ëÄ¡¸¦ ³Ñ¾î¼­¸é ¹ß»ýÇÑ´Ù. ¿¹¿Ü°¡ ¹ß»ýÇÏ¸é ½½·ÔÀÇ °³¼ö´Â ¼ÒÃâ Àü°ú º¯È­°¡ ¾ø´Ù.
IllegalOwnershipException - »ý¼ºÀÚ¿¡¼­ enforcePnwershipÀ» ÂüÀ¸·Î ÁöÁ¤ÇÑ °æ¿ì ÇöÀç ½º·¹µå°¡ ÀÚ½ÅÀÌ ¾òÀº ½½·Ôº¸´Ù ¸¹Àº ¼öÀÇ ½½·ÔÀ» ³õÀ¸·Á°í ÇÑ´Ù¸é ¹ß»ýÇÑ´Ù.

getID

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

Returns:
°íÀ¯ ID