Le seguenti figure rappresentano tre diverse situazioni per due thread che condividono una o due risorse non condivisibili.
In questo primo caso i due thread non possono usare la risorsa non condivisibile in contemporanea (zona V) e quindi non possono entrare in zona vietata.
In questo secondo caso ogni singolo thread usa due risorse e vie è un momento in cui le usa entrambe, ma i due tread accedono in modo analogo alle risorse (prima la prima risorsa e poi la seconda).
In quest'ultimo caso i thread accedono in modo diverso alle risorse (in ordine opposto): non possono accedere ad alcune zone (zona I) e si intrappolano in altre (zona T) dando luogo ad un deadlock.
Viene realizzata la classe
Task
che rappresenta il compito (Runnable
) di un singolo thread. Tale classe accederà alle risorse. La classe
Risorsa
realizza mediante un semaforo binario (un solo permits) la risorsa. Le tre figure saranno illustrate mediante simulazione rispettivamente nei file
Simul1.java
Simul2.java
Simul3.java
Un file
README.md
per la documentazione in cui apparirà il proprio nome. Mettere il tutto nella directory
RisorseCondivise