Tale progetto affronta il classico problema del Produttore-Consumatore utilizzando semafori per la sincronizzazione. Il pattern produttore-consumatore coinvolge due tipi di thread: i produttori che producono elementi e li inseriscono in un buffer condiviso, e i consumatori che rimuovono elementi dal buffer e li consumano in modo asincrono.
- Produttori: producono elementi e li aggiungono al buffer condiviso.
- Consumatori: rimuovono elementi dal buffer e li consumano.
- Semafori: utilizzati per controllare l'accesso al buffer e mantenere la sincronizzazione tra i thread.
- Input da File: gli elementi da produrre vengono caricati da un file di input specificato come argomento da riga di comando.
- Logging: necessari per registrare tutte le operazioni di produzione e consumo in un log visualizzabile in una finestra di popup.
Il progetto è composto dalle seguenti classi:
ProducerConsumer
: Classe principale che gestisce l'inizializzazione e il coordinamento dei thread produttori e consumatori.Producer
: Classe che implementa il thread produttore.Consumer
: Classe che implementa il thread consumatore.Item
: Classe che rappresenta un elemento nel buffer da produrre e consumare.
- Compila il progetto:
javac semaphore/*.java
- Esegui il programma specificando il percorso del file di input contenente gli elementi da produrre:
java semaphore.ProducerConsumer <input_file_path>
- <input_file_path> è il percorso del file di testo contenente gli elementi da produrre. Il file deve avere il seguente formato:
<id1>,<name1> <id2>,<name2> ...