Mam taki problem do rozwiązania (bez priorytetów, może być dowolna ilość czytelników i dowlona ilość pisarzy). Moim wspólnym zasobem jest plik. Czytalnicy czytaja z pliku (liczbe) a pisarze pisza do pliku (liczbe). Jednak cos jest zle, bo w pliku mam jakies dziwne znaki a czytelnik wyswietlajac liczbe przeczytana wyswietla: "Czytelnik, liczba:" i nic nie ma po "liczba" :( Mam to zrobic na monitorach. Oto kod czytelni :
class Czytelnia{
private boolean ktosPisze= false;
private boolean chcePisac = true;
private boolean chceCzytac = false;
private int iluCzyta = 0;
public synchronized void startCzytanie() throws InterruptedException{
chceCzytac = true;
while((ktosPisze) || (!chcePisac))
wait ();
iluCzyta++;
notifyAll();
}
public synchronized void stopCzytanie() throws InterruptedException{
chceCzytac = false;
iluCzyta--;
if (iluCzyta == 0)
notifyAll();
}
public synchronized void startPisanie() throws InterruptedException{
chcePisac = true;
while((iluCzyta > 0) || (ktosPisze == true))
wait();
ktosPisze = true;
}
public synchronized void stopPisanie() throws InterruptedException{
chcePisac = false;
ktosPisze = false;
if(!chceCzytac)
{
ktosPisze = true;
chcePisac = true;
}
else
notifyAll();
}
}
No i mam klasy Czytajacy oraz Piszacy, gdzie kazdy z nich ma pole Czytelnia i w metodzie run odpowiednio dla kazdej klas otwieram czytam/pisze do pliku i zamykam plik no i wywoluje metody z Czytelni odpowiednie. HELP!