public class ProvaTraghetto { public static void main(String[] args) { int P = 100; // Peso massimo di un'auto int K = 500; // Carico massimo tollerato dal traghetto int MAX = 10; // Numero massimo di auto a bordo int MIN = 6; // Numero minimo di auto per poter partire int nauto = 20; MonitorIsole m = new MonitorIsole(K, MAX, MIN); Traghetto t = new Traghetto(m, (Math.random() > 0.5) ? MonitorIsole.ISOLA_A:MonitorIsole.ISOLA_B); t.start(); for (int i = 0; i < nauto; i++) { new Auto(m, i, (Math.random() > 0.5) ? MonitorIsole.ISOLA_A:MonitorIsole.ISOLA_B, (int)(Math.random()*P + 1)).start(); } } } // ======== STARVATION ================ /* * La soluzione presenta starvation nel caso in cui le auto con peso maggiore siano indefinitamente scavalcate da * quelle con peso minore nell'accesso al traghetto. Il problema si pu risolvere con una soglia minima di risospensioni * per le auto pi pesanti, superata la quale queste ultime acquisiscono priorit nell'accesso al traghetto. */ // ======== NOTE ================ /* Anche in questo caso il traghetto si blocca se il numero minimo di auto non si raggiunge. Questo ferma completamente il sistema, * in attesa dell'arrivo di qualche altra auto. Non si tratta per di DEADLOCK, in quanto non vi reciproca dipendenza tra auto che * devono arrivare e traghetto che le aspetta. In altre parole, il blocco si risolve se arrivano abbastanza auto, ma il loro arrivo * non dipende in nessun modo dal traghetto. */