Untitled

 avatar
unknown
plain_text
a month ago
2.5 kB
4
Indexable
/**
 * Clasa principal pentru gestionarea accesului la resurse in centrul de lectura
 * Implementeaza algoritmul de sincronizare pentru accesul scriitorilor si cititorilor
 */
package mediateca;

public class CentruLectura {
    private int vizitatori = 0;
    private boolean autorOcupat = false;
    private int volumeDisponibile = 0;

    /**
     * Permite unui cititor sa intre in centrul de lectura
     * @param cod - codul unic al cititorului
     */
    public synchronized void intrareVizitator(String cod) throws InterruptedException {
        while(autorOcupat) {
            wait();
        }
        vizitatori++;
        System.out.println("Vizitator " + cod + " a intrat in centrul de lectura.");
    }

    /**
     * Inregistreaza iesirea unui cititor din centrul de lectura
     * @param cod - codul unic al cititorului
     */
    public synchronized void iesireVizitator(String cod) {
        vizitatori--;
        System.out.println("Vizitator " + cod + " a iesit din centrul de lectura.");
        notifyAll();
    }

    /**
     * Permite unui autor sa intre in centrul de lectura
     * doar daca nu este nimeni altcineva inauntru
     * @param cod - codul unic al autorului
     */
    public synchronized void intrareAutor(String cod) throws InterruptedException {
        while(autorOcupat || vizitatori > 0) {
            wait();
        }
        autorOcupat = true;
        System.out.println("Autor " + cod + " a intrat in centrul de lectura.");
    }

    /**
     * Inregistreaza iesirea unui autor din centrul de lectura
     * @param cod - codul unic al autorului
     */
    public synchronized void iesireAutor(String cod) {
        autorOcupat = false;
        System.out.println("Autor " + cod + " a iesit din centrul de lectura.");
        notifyAll();
    }

    /**
     * Inregistreaza un volum nou creat de catre un autor
     * @param cod - codul unic al autorului
     */
    public synchronized void publicaVolum(String cod) {
        volumeDisponibile++;
        System.out.println("Autor " + cod + " a publicat volumul " + volumeDisponibile
                + ". Total volume disponibile: " + volumeDisponibile);
        notifyAll();
    }

    /**
     * Returneaza numarul total de volume disponibile in centrul de lectura
     * @return numarul total de volume
     */
    public synchronized int getVolumeDisponibile() {
        return volumeDisponibile;
    }
}
Editor is loading...
Leave a Comment