|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.wegra.thread.Lock
org.wegra.thread.RWLock
Àбâ/¾²±â ¶ôÀº ¾²´Â µµÁß Àаųª, Àд µµÁß ¾²°Å³ª Çϴ°ÍÀ» ¸·¾ÆÁØ´Ù. ¶ÇÇÑ, ¿©·¯ ¾²·¹µå¿¡¼ µ¿½Ã¿¡ ¾²´Â °Íµµ ¸·¾ÆÁØ´Ù. ÇÏÁö¸¸ ¿©·¯ ½º·¹µå¿¡¼ µ¿½Ã¿¡ Àд °ÍÀº Çã¿ëµÈ´Ù. Àбâ´Â ¾²±âº¸´Ù ³õÀº ¿ì¼±¼øÀ§¸¦ °¡Áö´Âµ¥ ÀÌ·Î ÀÎÇØ ¾²±â°¡ ¸¶ÃÄÁú ¶§±îÁö ¹Ì·ïÁ³´ø ¸ðµç Àбâ´Â Ç×»ó ´ÙÀ½ ¾²±ã°¡ ÁøÇàµÇ±â Àü¿¡ ¸ÕÀú ¼öÇàµÈ´Ù. ¸ðµç ¾²±â´Â ¿äûµÈ ¼ø¼´ë·Î ÀÌ·ïÁöµµ·Ï ¤¾º¸ÀåµÈ´Ù. Áï, °¡Àå ¸ÕÀú ¿äûµÈ ¾²±â°¡ °¡Àå ¸ÕÀú 󸮵ȴÙ. ÀФ¡/¾²±â ¶ôÀº ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
public class DAtaStructureOrResourse { RWLock lock = new RWLock(); public void access() throws InterrruptedException { lock.requestRead(); try { // Àб⸦ ¿©±â¿¡¼ ÇÑ´Ù. } finally { lock.readAccomplished(); } } public void modify() throws InterruptedException { lock.requestWrite(); try { // ¾²±â¸¦ ¿©±â¿¡¼ ÇÑ´Ù. } finally { lock.writeAccomplished()' } } }nÇöÀç ±¸ÇöµÈ RWLockÀº ŸÀӾƿôÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. RWLockÀº Dong LeadÀÇ Concurrent Programming in Java (Addision Wedley, 1997, pp.300-303) ÀÇ Àбâ/¾²±â ¶ôÀ» ±â¹ÝÀ¸·Î ÀÛ¼ºµÇ¾ú´Ù. ÇÊÀÚ´Â Äڵ带 ´Ü¼øÈ ÇßÀ¸¸ç, ºí·ÏÅ· ¾øÀÌ ¶ôÀ» ¾ò´Â ±â´ÉÀ» Ãß°¡Çß´Ù. ¶ÇÇÑ, Àбâ/¾²±â ¶ôÀ» ±â¹Ý Ŭ·¡½º·Î½á ¿©·¯ºÐÀÌ »ó¼Ó¹Þ¾Æ ¾²µµ·Ï ÇÏÁö ¾Ê°í µ¶¸³Çü Ŭ·¡½º·Î½á ±¸ÇöÇß´Ù. Scott Osk°ú Henry WongÀÌ ÁýÇÊÇÑ JavaThread(O'Reilly 1997, pp. 180-187)¿¡´Â ÇÊÀÚÀÇ °Í°ú ÀüÇô ´Ù¸£°Ô Àбâ/¾²±â ¶ôÀ» ±¸ÇöÇØ ³õ¾ÒÀ¸´Ï ÂüÁ¶Çϱ⠹ٶõ´Ù.
Nested Class Summary | |
static class |
RWLock.Test
Test Ŭ·¡½º´Â ´ÜÀ§ Å×½ºÆ®¸¦ À§ÇÑ Å¬·¡½º·Î ´ÙÀ½°ú °°ÀÌ ½ÇÇà½Ãų ¼ö ÀÖ´Ù.
|
Constructor Summary | |
RWLock()
RWLock constructor comment. |
Method Summary | |
boolean |
acquire(long timeout)
¼¼¸¶Æ÷¾î¸¦ ¾ò´Â´Ù. |
int |
getID()
ÇØ´ç ¼¼¸¶Æ÷¾î °´Ã¤ÀÇ °íÀ¯ ID¸¦ ¹Ýȯ |
void |
readAccomplished()
¶ôÀ» ³õ´Â´Ù. |
void |
release()
¼¼¸¶Æ÷¾î¸¦ ³õ´Â´Ù. |
boolean |
requestImmediateRead()
ÀÌ |
boolean |
requestImmediateWrite()
ºí·ÏÅ· ¾øÀÌ ¾²±â ¿äûÀ» ÇÑ´Ù. |
void |
requestRead()
Àб⠶ôÀ» ¿äûÇϳ®. |
void |
requestWrite()
¾²±â¸¦ ¿äûÇÑ´Ù. |
void |
writeAccomplished()
¶ôÀ» ³õ´Â´Ù. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public RWLock()
Method Detail |
public boolean acquire(long timeout) throws java.lang.InterruptedException, TimeoutException
Mutex
ÀÇ °æ¿ì ¼ÒÀ¯±ÇÀ» ¾òÀ¸¶ó´Â ¶æÀ̸ç,
CountingSemaphore
ÀÇ °æ¿ì Ä«¿îÆ®¸¦ Çϳª °¨¼Ò½Ã۶ó´Â
¶æÀÌ´Ù.
java.lang.InterruptedException
- ´Ù¸¥ ½º·¹µå¿¡ ÀÇÇØ¼ ¶ôÀ» ¾ò´Â °ÍÀÌ
ÀÎÅÍ·´Æ® µÇ¾úÀ» °æ¿ì.
TimeoutException
- ¼¼¸¶Æ÷¾î°¡ ¾ò¾îÁö±â Àü¿¡ ŸÀӾƿôÀÌ ´Ù Áö³ª°£ °æ¿ì.public void readAccomplished()
public void release()
public boolean requestImmediateRead()
public void read() { if ( lock.requestImmediateRead() ) { try { // ¿©±â¿¡¼ Àб⸦ ÇÑ´Ù. } finally { lock.readAccomplished(); } } else { // ÀÐÀ» ¼ö ¾ø¾ú´Ù. } }
public boolean requestImmediateWrite()
public void write() { if (lock.requestimmediateWrite() ) { try { // ¿©±â¿¡¼ ¾²±â¸¦ ÇÑ´Ù. } finally { // lock.writeAccomplished() } } else { // ¾µ ¼ö ¾ø¾ú´Ù. }
public void requestRead() throws java.lang.InterruptedException
readAccomplished()
¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.
java.lang.InterruptedException
public void requestWrite() throws java.lang.InterruptedException
writeAccomplished()
¸¦ È£ÃâÇØ ÁÖ¾î¾ß ÇÑ´Ù.
java.lang.InterruptedException
public void writeAccomplished()
public final int getID()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |