Seminario 1. Polimorfismo y Enlace Dinámico
Ejercicio 1
Ejercicio 2
Seminario 2. Genericidad
Ejercicio 1
Ejercicio 2
Seminario 3. Cálculo lambda
- Recordatorio de cálculo Lambda
- Representan dos funciones que reciben dos parámetros y devuelven una función
- true devuelve el primer parámetro
- false devuelve el segundo parámetro
Ejercicio 1
- El if else es equivalente al operador ternario
- Recibirá 3 parámetros:
[ ]?[ ]:[ ]
Ejercicio 2
Seminario 4. Funciones de primera clase
- Una estructura que se puede recorrer
- Iterar
Funciones de orden superior
Nota: como ya están hechos en los laboratorios, vamos a hacer las llamadas a los métodos
Ejercicio 1
Ejercicio 2
Ejercicio 3
Seminario 5. Clausuras
Ejercicio 1
Seminario 6. Programación Concurrente
Ejercicio 1
- El lock bloquea un trozo de código en base a un objeto
- Hay que hacer las operaciones de forma atómica
- Separar los locks para que no dependan entre sí y posteriormente implementarlos en el método concreto
Ejercicio 2
El problema de los cinco filósofos
Ideas:
- Hacer lock a un objeto que encapsule 2 tenedores:
lock(new Par(this.tenedorIzq, this.tenedorDer))
- Hacer un lock global:
lock(objetoGlobal)
- Sólo puede comer un filósofo a la vez, no 2
- Nunca va a caer en un deadlock
- Solución: Hacer un manejador de tenedores
- La solución está en el campus
Seminario 7. Programación concurrente
Producto de Matrices
Ejercicio 1
Ejercicio 2
- El
Invoke
se usa para la paralelización de tareas
- El
ForEach
se usa para la paralelización de datos (con diferentes datos ejecuta la misma tarea)
- El
For
se usa para la paralelización de datos (caso especial del ForEach
)
El método más apropiado sería el For
Ejercicio 3
-
Se podría hacer combinaciones de bucles paralelos
-
Si lo hacemos en el bucle de la i, se harían N
hilos y P * M
operaciones
-
Si lo hacemos en el bucle de la k, se harían M
hilos y 1
operación
-
Crear un hilo que haga muchas operaciones siempre va a ser más eficiente que crear muchos hilos y haga pocas o 1 operaciones