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