|
|||||||||||
| 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.InterruptedExceptionpublic void writeAccomplished()
public final int getID()
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||