ÇÁ·Î±×·¡¹Ö

 3198, 1/160 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   ksbgenius
   [ÀÚ¹Ù]¾²·¹µå µ¿±âÈ­ ¸Þ¼Òµå °ü·Ã Áú¹®

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3032 [º¹»ç]



class Buffer{
        private int worm1,worm2,worm3;
        private boolean empty = true;
        
        public synchronized int get1(){
                while(empty){
                }
                empty = true;
        return worm1;
        }
        public synchronized void put1(int w1){
                while(!empty){
                }
                empty = false;
                worm1 = w1;
        }
        public synchronized int get2(){
                while(empty){
                }
                empty = true;
        return worm2;
        }
        public synchronized void put2(int w2){
                while(!empty){
                }
                empty = false;
                worm2 = w2;
        }
        public synchronized int get3(){
                while(empty){
                }
                empty = true;
        return worm3;
        }
        public synchronized void put3(int w3){
                while(!empty){
                }
                empty = false;
                worm3 = w3;
        }
}

class Worm1 extends Thread{
        private Buffer buffer;
        private int worm1;
        
        public Worm1(Buffer b){
                buffer = b;
        }
        public void run(){
                for(int i = 0; i <5; i++){
                        worm1 = i;
                        System.out.println(worm1+"¹ø ¼¿·Î worm1 À̵¿");
                         buffer.put1(worm1);
                        try{
                                sleep((int)(Math.random()*1000));
                        }
                        catch(InterruptedException e){
                                
                        }
                }
        }
}
class Worm2 extends Thread{
        private Buffer buffer;
        private int worm2;
        public Worm2(Buffer b){
                buffer = b;
        }
        public void run(){
                for(int i = 0; i < 5; i++){
                        worm2 = i;
                        System.out.println(worm2+"¹ø ¼¿·Î worm2À̵¿");
                        buffer.put2(worm2);
                        try{
                                sleep((int)(Math.random()*1000));
                        }
                        catch(InterruptedException e){
                                
                        }
                }
        }
}
class Worm3 extends Thread{
        private Buffer buffer;
        private int worm3;
        public Worm3(Buffer b){
                buffer = b;
        }
        public void run(){
                for(int i = 0; i < 5; i++){
                        worm3 = i;
                        
                        System.out.println(worm3+"¹ø ¼¿·Îworm3À̵¿");
                        buffer.put2(worm3);
                        try{
                                sleep((int)(Math.random()*1000));
                        }
                        catch(InterruptedException e){
                                
                        }
                }
        }
}

public class CoordinationTest{
        public static void main(String[] args){
                Buffer b = new Buffer();
                Worm1 t1 = new Worm1(b);
                Worm2 t2 = new Worm2(b);
                Worm3 t3 = new Worm3(b);
                t1.start();
                t2.start();
                t3.start();
                
        }
}

À§ ¼Ò½º¸¦ ½ÇÇàÇÏ¸é °á°ú°¡ ÃÑ 4°³¸¸ ³ª¿É´Ï´Ù.
Á¦°¡ »ý°¢Çß´ø °ÍÀº Áö±Ý °è¼Ó for¹®¿¡¼­ °¢°¢ 5°³¾¿À» È£Ãâ Çϴϱñ 15°³°¡ ³ª¿Í¾ß µÇ´Âµ¥. 4°³¸¸ ³ª¿À³×¿ä.
±×¸®°í wormÀÌ 3°³°¡ Àִµ¥, ÀÌ wormµéÀÌ µ¿½Ã¿¡ µ¿ÀÏÇÑ ¼¿¿¡ ÀÖÁö ¾Ê°Ô ÇÏ°í ½ÍÀºµ¥ Àß ¾ÈµÇ³×¿ä
Ãâ·ÂÇϸé
0¹ø ¼¿·Î worm1 À̵¿
0¹ø ¼¿·Îworm3À̵¿
0¹ø ¼¿·Î worm2À̵¿
1¹ø ¼¿·Î worm1 À̵¿
ÀÌ·± ½ÄÀ¸·Î ³ª¿À´Âµ¥... °¢ wormµéÀÌ µ¿½Ã¿¡ µ¿ÀÏÇÑ ¼¿¿¡ ÀÖ´Â »óÅ ÀÔ´Ï´Ù.
±×·¯´Ï±ñ ¿¹¸¦ µé¾î¼­
0¹ø ¼¿·Î worm1 À̵¿
1¹ø ¼¿·Î worm1À̵¿
0¹ø ¼¿·Î worm2 À̵¿
2¹ø ¼¿·Î worm3 À̵¿
ÀÌ·±½ÄÀ¸·Î ³ª¿À°Ô ÇÏ°í ½ÍÀºµ¥...

ù¹øÂ° Áú¹®
¿Ö 4°³¹® Ãâ·ÂµÇ´ÂÁö ±×¸®°í
wormµéÀÌ µ¿ÀÏÇÑ ¼¿¿¡ ÀÖÁö ¾Ê°Ô ÇÏ´Â ¹ý...

  Hit : 4497     Date : 2011/06/02 01:50



    
$Zero while(ÀüºÎ)
ºÎºÐÀÌ ¹®Á¦ÀÔ´Ï´Ù.

À̰÷Àº ½º·¹µå°¡ Á¢±ÙÇÏ¸é ¹«ÇÑ·çÇÁ¸¦ µ¹°Ô µÇÁö¿ä.
±×·³ °è¼ÓÇØ¼­ ¹«ÇÑ·çÇÁ¸¦ µ¹±â¶§¹®¿¡ ÇÁ·Î±×·¥ ÁøÇàÀÌ ¾ÈµÇ´Â °Í ÀÔ´Ï´Ù.

Á¤È®È÷ ¾î¶² ÇÁ·Î±×·¥ÀÎÁö Àß ¸ô¶ó¼­ Á¶¾ð¸¸ ÇØµå¸®´Âµ¥.. ¹®Á¦´Â
°¢°¢ÀÇ while ¹®¿¡¼­ ¹«ÇÑ·çÇÁ¿¡ ºüÁö´Â °ÍÀÔ´Ï´Ù. .
¹«ÇÑ·çÇÁ¿¡ ºüÁöÁö ¾Êµµ·Ï Äڵ带 ¹Ù²ãº¸¼¼¿ä. 4°³ Ãâ·Â¸¸ ÇÑ°Í °°Áö¸¸ 4°³¸¦ Ãâ·ÂÇÑµÚ °è¼ÓÇØ¼­ cpuÀÚ¿øÀ» ¼Ò¸ðÇϰí ÀÖ´ä´Ï´Ù(¹«ÇÑ·çÇÁµ¹¸é¼­)

(»ç½Ç ºÐ¼®Çϱ⠱ÍÂú¾Ò½À´Ï´Ù... È¥ÀÚ ÇØ°áÇØº¸¼¼¿ä ~ ±×°Ô ´õ °øºÎ°¡ µÇ´Ï)
2011/06/03  
wnsan1004 Áú¹® ÅõôÈÄ °øºÎÇÏ´Â ÀúÀÇ ¸ð½ÀÀ» ºÁ¼­, ´äº¯ ¿Ã¸³´Ï´Ù..
Zero´ÔÀÌ ¸»ÇßµíÀÌ, while¹®¿¡¼­ ¹«ÇÑ ·çÇÁ µ¹±â¶§¹®¿¡, °¢°¢ÀÇ while ¹® ¾È¿¡ break; ¸¦ µÎ¾î, ¹«ÇÑ·çÇÁ¸¦ ¹æÁö ÇØ¾ßÇÕ´Ï´Ù.

±×¸®°í °¢¹ú·¹ÀÇ À̵¿ÀÌ 0¹æºÎÅÍ 5¹æ±îÁö ¼ø¼­´ë·Î ¿òÁ÷ÀÌÁö ¾Ê°Ô Çϱâ À§Çؼ±,
Thread.Sleep()°ªÀ» Áõ°¡ ½Ã۸é, µË´Ï´Ù. sleep°ªÀÌ ÀÛÀº °ü°è·Î, µ¿½Ã¿¡ ½ÃÀ۵Ǵ ´Ù¸¥ ¾²·¹µå°¡ »¡¸® ÀÐÇôÁö±â¶§¹®¿¡, ¼ø¼­´ë·Î ÀÐÇôÁö´Â°Í "ó·³"º¸ÀÌ´Â °Í»ÓÀÔ´Ï´Ù.
2011/06/05