ÇÁ·Î±×·¡¹Ö
ù ÆäÀÌÁö ·£´ý ±Û ȸ¿ø°¡ÀÔ ·Î±×ÀÎ
ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-03 20:25:15
URL https://te31.com/rgr/view.php?id=study&no=1823 ¸ð¹ÙÀÏ È­¸é
¼¼¸¶Æ÷¾î µÎ°³·Î ÇÁ·Î¼¼½º(½º·¹µå) µ¿±âÈ­

¾È³Ä¼¼¿©

semaphore µÎ°³¸¸À¸·Î
½º·¹µåÀÇ "¼ø¼­" µ¿±âÈ­¶ö±î³ª~ ÇÏ·Á´Âµ¥
½Ã±×³ÎÀº ÀÌ¿ë¾ÈÇϱ¸¿© (½Ã±×³Î Çڵ鷯 ¸¸µé±â ±ÍÂú¾Æ¿©)

±Ùµð Á¦ »ó½ÄÀ¸·Î´Â ÀÌ°Ô ÀߵɰŰ°Àºµ¥ ¾ÈµÇ³×¿ä.

binary semaphore µÎ°³ ¼±¾ðÇß±¸¿©
°£´ÜÇÏ°Ô ÇÔ¼ö¸¸µé¾î¼­ »ç¿ëÇϱ¸ÀÖ¾î¿ä

semaLock(int idx);
idx ¹ø° semaphore ¸¦ lockÇϱ¸¿ä
semaUnlock(int idx);
³× idx¹ø° sema unlockÇØÁÖ±¸¿©.

¾Æ·¡´Â °£·«È­ÇÑ ¼Ò½ºÀÔ´Ï´Ù.
cnt ´Â Àü¿ªº¯¼ö±¸¿ä cloneÀ¸·Î ¾Ë¾Æ¼­ ¿É¼ÇÀ߳־ Àü¿ªº¯¼ö´Â °°ÀÌ ¾²°ÔÇÞ¾î¿ä. ½º·¹µåó·³.

int foo()
{
    while(1)
    {
        semaLock(1);
        cnt++;
        printf("foo() : %d\n", cnt);
        semaUnlock(0);
    }
}

int main()
{
    clone(foo()); //°£·«È­ÇÔ ±×³É ÇÁ·Î¼¼½º Çϳª »ý¼ºÇÑ´Ùº¸½É´ï.
    semaLock(0);
    semaLock(1);
    while(1)
    {
        semaUnlock(1);
        semaLock(0);
        cnt--;
        printf("main() : %d\n", cnt);
        if( cnt != 0 || cnt != 1 )
        {
            printf("¤¸´ï");
        }
}



¸Ó¸®¼ÓÀ¸·Î µ¹·ÁºÁµµ ¹®Á¦¾øÀ̵ɰŰ°Àºµð
½ÇÁ¦·Î´Â ¹®Á¦°¡ Á»Àֳ׿©

Á¦°¡ ¾îµô³õÄ¡°íÀմ°ǰ¡¿© ¤Ð¤Ð¤Ð¤Ð

Áú¹® | 1342¸íÀÌ Àоú¾î¿ä. 3.147.89.85

0
2 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-03 21:37:17
¼³¸¶ ¼¼¸¶Æ÷¾î ÇÏ´Â µµÁß¿¡ ½ºÄÉÁ층 µÇ´Â°Ç ¾Æ´Ï°ÚÁÒ?
Á¦°¡ µð¹ö±ëÇغ¸¾ÒÀ»¶© ¼¼¸¶Æ÷¾î°¡ µÎ¼¼¹ø ¾ûÄѼ­ µÇ´Â°Å º¸¸é ¹º°¡ ½É°¢ÇÏ°Ô ²¿À̳ªºÁ¿ä...
¼¼¸¶Æ÷¾î¸¦ ÇÔ¼ö·Î Æ÷ÆÃÇسö¼­±×·²±î¿ä? Æ÷ÆÃÇغÃÀÚ 1ÁÙÂ¥¸® ¹Ù·Î semopÇÏ´Â°Å¶ó¼­ ¹®Á¦¾øÀ¸¸®¶ó »ý°¢µÇ´Âµ¥¿ä
3 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-03 22:19:44
±×³É¾Æ·¡¿Í °°ÀÌ

lock
//critical section
unlock

ÇÏ¹È µÇÁö ¾Ê¤¤³ª¿ä?
4 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-03 22:31:38
È÷ÆR ¹Ùº¸µÅ¼­ Çϳªµµ ¸ð¸£°Ú³×¿©
±Ùµ¥ Àú·¸°Ô Çϸé foo()¿¡¼­ ¸ÕÀú semaLock(1);À» °É¾î¹ö¸®°í
Á÷ÈÄ¿¡ ¸ÞÀο¡¼­ semaLock(1); ½ÃµµÇϸé ÇÏ¿°¾øÀÌ ±â´Ù¸®Áö ¾Ê³ª¿ä?

1¹ø ¾ð¶ôÀº ¸ÞÀÎÀÇ while¹® ¾È¿¡ Àִµ¥
ÁøÀÔÇϱ⵵ Àü¿¡ ¹«ÇÑ´ë±â Ÿ¸é ´ä ¾ø¾îº¸À̴µ¥
6 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-03 23:12:18
cnt != 0 || cnt != 1

ÀÌ ±¸¹®Àº Ç×»ó true ÀÔ´Ï´Ù.
7 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-03 23:13:33
foo :
signal(bar)
wait(foo)
process()

bar:
wait(bar)
process()
signal(foo)

ÀÌÇüÅÂÀÚü´Â °¢ÀÚÀÇ ÇÁ·Î¼¼½º°¡ ´Ü ÇÑ°³¾¿¸¸ ÀÖÀ»°æ¿ì¿¡´Â ¹®Á¦µÇÁö ¾ÊÀ»°ÍÀ¸·Î º¸ÀÔ´Ï´Ù.
8 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-03 23:14:07
(À§ÀÇ ¼¼¸¶Æ÷¾î¸¦ ÀÌ¿ëÇÑ ¹æ½Ä¿¡¼­´Â)
11 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-04 07:55:52
//semaLock(1);
while(1)
{
// semaUnlock(1);
semaLock(0);
cnt--;
printf("main() : %d\n", cnt);
if( cnt != 0 || cnt != 1 )
{
printf("¤¸´ï");
}
semaUnlock(1);
}
12 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-04 07:57:26
Äڵ尡 ©¸®³×¿ä if¹® ¹Ø¿¡¼­ semaUnlock(1); ÇØÁÖ¸é µÇÁö ¾ÊÀ»±î ½Í½À´Ï´Ù.
13 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-04 09:19:31
6 // ¾ÆÇÏ Á¦°¡ À߸øÀû¾ú³×¿ä ¼Ò½º»ó¿¡¼± ´ç¿¬È÷ && À̾ú½À´Ï´Ù ¤»¤»
7 // ¸ñÇ¥°¡ ½Ã±×³Î¾È»ç¿ëÇϴ°ſ´¾î¼­¿ä... ½Ã±×³ÎÇڵ鷯¸¸µé±âµµ ±ÍÂú°í ½Ã±×³ÎÂÊ °øºÎ¸¦ ¸¹ÀÌ ¾ÈÇϱâµÎ Çß±¸¿ä.. (½Ã±×³ÎÇڵ鷯¾øÀÌ SIGCONT°°Àº°Ç ±¸ÇöµÇ¾îÀִ°ǰ¡¿ä?)

12 // ¿À.. ÇѹøÇغ¼°Ô¿ä
14 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-04 09:22:00
12 // ¹®Á¦´Â ±×°Ô ¾Æ´Ï³×¿ä »ç½Ç ·ÎÁ÷ÀÚü´Â ±×°Å³ª À̰ųª¶È°°ÁÒ
Á¦°¡ºÃÀ»¶§´Â ¹ÙÀ̳ʸ® ¼¼¸¶Æ÷¾îÀÚü°¡ ¾îµð¼±°¡ »ß²ý³ª³ªº»µ¥¿ä
TAS functionÀº cpu ´Ü¿¡¼­ Áö¿øÇØÁֱ⶧¹®¿¡
¼¼¸¶Æ÷¾î°¡ 1À̳ª 0ÀÌ µÇ´Â Áß°£¿¡ ÇÁ·Î¼¼½ºµéÀÌ ½ºÄÉÁìµÉ¸®´Â ¾ø´Â°Ç È®½ÇÇѵ¥
±× ¼¼¸¶Æ÷¾î ¼öÁ¤±îÁö °¡´Â ´Ü°è´Ü°è¿¡¼­ ½ºÄÉÁìÀ̵Ǵ°ÇÁö....
15 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-04 17:48:21
14/µ¥µå¶ô ¹®Á¦°¡ ¾Æ´Ñ°¡º¸³×¿ä;;
ÇØ°á µÇ¸é Èı⠺ÎŹµå¸³´Ï´ç..
16 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-05-04 20:21:29
³× ... ¾à°£ ½ºÅÃÂÊÀ̶ûµµ °ü·ÃÀ־À̱⵵Çϱ¸¿ä.
Áö±Ýº¸´Ï±î
cnt ¸¸Áö´Â ÂÊ¿¡´Â Á÷ÈÄ¿¡ ¹Ù·Î cnt2¶ó´Â Àü¿ªº¯¼ö 1¾¿Áõ°¡ÇÏ°ÔÇ߰ŵç¿ä

int foo()
{
cnt++;
cnt2++;
}
int main()
{
cnt--;
cnt2++;
}

ÇѸ¶µð·Î ¾ó¸¸Å­ ¼­·Î ¿Ô´Ù¸®°¬µû¸®ÇÏ´ÂÁöº¸·Á°íÇ޴µ¥
Çã¾ó? cnt2°¡ "Ç×»ó" ½ºÅÃÅ©±â³ª ¹¹ ´Ù¸¥°Íµé¿¡ »ó°ü¾øÀÌ
65535 ±à±î 16ºñƮ¥¸® int Çü¸¸Å­ ¿Ô´Ù¸®°¬´Ù¸®Çϳ׿ä (2^16 = 65535)

¹¹ÁöÀÌ°Å.. ÀÌ°Å ¹¹Àֳ׿äºÐ¸í ÀÌ°Å ¾¾¹ßÀÌ´Ù 16ºñÆ®¸é shortÇü¾Æ´Ï·Á³ª¿ä
´ñ±ÛÀ» ÀÛ¼ºÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.
(±ÇÇÑÀÌ ¾ø´Â ȸ¿ø·¹º§)
¸ñ·ÏÀ¸·Î
ÀÌ¿ë¾à°ü | ±¤°í/Á¦ÈÞ | °³ÀÎÁ¤º¸Ãë±Þ¹æħ | ¹®ÀÇ/½Å°í | ¸ð¹ÙÀÏ TE31 | ¼­¹ö ºÎÇÏ : 13.25%
½Ç½Ã°£ Issue Ä¿¹Â´ÏƼ TE31 [¾ËÁö·Õ] ¨Ï 2002-2024
TOP arrow_upward