1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
l = ['A', 'B', 'C', 'D', 'E']; # Todos los procesos del sistema s = []; # Secuencia segura reclamado = {'A' => 4, 'B' => 2, 'C' => 2, 'D' => 1, 'E' => 5} asignado = {'A' => 1, 'B' => 1, 'C' => 2, 'D' => 0, 'E' => 3} libres = 2 while ! l.empty? do p = l.select {|id| reclamado[id] - asignado[id] <= libres}.first raise Exception, 'Estado inseguro' if p.nil? libres += asignado[p] l.delete(p) s.push(p) end puts "La secuencia segura encontrada es: " + s.to_s |