[ masterBG @ 27.12.2011. 00:57 ] @
Pozdrav, prilikom kreiranja niti, ta nit dobije neki id, kojim ona treba da pozove clana niza semaphora semaphore[id].acquire(); medjutim prilikom sledecih kreiranjan niti ta promenljiva id se promeni u vrednost sledecih niti, pa prilikom poziva semaphore[id].release(); prijavljuje NullPointerException. Molim za pomoc... kako da svaka nit ima svoj id cija vrednost ja dodeljujem?
[ sanchi @ 27.12.2011. 01:07 ] @
A da okacis neko parce koda pa da vidimo gde gresis?
[ masterBG @ 27.12.2011. 01:09 ] @
Evo ga...
EDIT: Dobro je da ima nekoga, patim se sa ovim, a imam kolokvijum sutra iz ovog...
EDIT2:Nisam se tek sad setio da ucim, nego sam se tek sad setio da mogu ovde da pitam. Jos mi nije uslo u navika da postoji i ovaj forum...
Code:

private class filozofiR extends SimulationThread {

        public filozofiR(int id) {
            super(TEXT_FILOZOF + " " + id, BOJA_FILOZOF);
            setContainer(obradjujeFilozof);
            idF=id;
        }
        
        
/*
 * radiNestoDrugo();
            synchronized (lock) {
                while (brFilozofa > 0) {
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        // Za sada smemo ignorisati
                    }
                }
                brFilozofa++;
            }
            jede();
            synchronized (lock) {
                brFilozofa--;
                if (brFilozofa == 0) {
                    lock.notify();
                }
            }
 * 
 * */
        
        @Override
        protected synchronized void step() {
            System.out.println("jjj "+Thread.currentThread().getId());
            System.out.println("radi "+idF);
            int id=idF;
            System.out.println("radi2 "+id);
            while(true){
                System.out.println("radi3 "+id);
            radiNestoDrugo();
            System.out.println("radi4 "+id);
            takeForks(idF);
            System.out.println("radi5 "+id);
            jede();
            putForks(id);
        
            }
        }
        public void test(int i){
            System.out.println("radiT "+i);
            int id=i;
            System.out.println("radiT "+id);
            System.out.println("nizStanja : "+nizStanja[id]);
            System.out.println("radiT "+id);
            int l,d;
            if(id>0){
                l=id-1;
            }else{
                l=4;
            }
            if(id==4){
                d=0;
            }else{
                d=id+1;
            }
            System.out.println("radiT "+id);
            System.out.println("t : "+id);
            if((nizStanja[id]==HUNGRY)&&(nizStanja[l]!=EAT)&&(nizStanja[d]!=EAT)){
                Thread.currentThread().getId();
                System.out.println("t : "+id);
                nizStanja[id]=EAT;
                System.out.println("radiT "+id);
                System.out.println("nizStanja : "+nizStanja[id]);
                System.out.println("jjj "+Thread.currentThread().getId());
                //nizS[id].release();
                System.out.println("nizStanja : "+nizStanja[id]);
            }
        }
        public void takeForks(int i){
            try {
                int id=i;
                mutex.acquire();
                System.out.println(id);
                nizStanja[id]=HUNGRY;
                System.out.println(id);
                test(id);
                System.out.println(id);
                mutex.release();
                System.out.println(id);
                //nizS[id].acquire();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
        public void putForks(int i){
            try {
                mutex.acquire();
                System.out.println("ffffffffffff");
                nizStanja[i]=THINKING;
                int l,d;
                if(i>0){
                    l=i-1;
                }else{
                    l=4;
                }
                if(i==4){
                    d=0;
                }else{
                    d=i+1;
                }
                test(l);
                test(d);
                mutex.release();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
        
        

        private void jede() {
            setContainer(pristupBaza);
            setText(TEXT_JEDE);
            work(1000, 2 * 1000);
            setText(TEXT_PROCITAO);
            setContainer(obradjujeFilozof);
        }

        private void radiNestoDrugo() {
            setContainer(obradjujeFilozof);
            setText(TEXT_OBRADJUJE);
            work(DUZINA_OBRADE, 2 * DUZINA_OBRADE);
            setText(TEXT_OBRADIO);
        }
    }
[ sanchi @ 27.12.2011. 01:26 ] @
Nece ici ovako... imas PP.
[ masterBG @ 29.12.2011. 14:43 ] @
Resio sam problem. Sanja hvala ti puno! Jedno pitanje povezano sa semaforima. Da li neko ko se profesionalno bavi prograamirannjem moze da mi kaze koliko im su im zaista potrebni semaphori, lock-ovi, wait/notify, odnosno sta najvise koriste?