Solución de los ejercicios de concurrencia
| #1| #2| #3| | | | #4| #1| #2| | | | #3| #4|#1-El programa ya termina H1 |---|---|---| | | |---|---|---| | | |---|---|---| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #1| #2| #2| | | | #2| #2| #2| | | | #2| #3| #4| #1| #2| #3| #4| El programa termina. H2 | | | |---|---|---| | | |---|---|---| | | |---|---|---|---| | | | | | | | | | | | | | | | | | | | | | | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
En este ejercicio, el hilo 2 se queda esperando continuamente a que el hilo 1 libere el cerrojo para poder acceder a la función.
El programa finaliza en el hilo 1 cuando llega dos veces a la instrucción 4 (bucle for).
Modificación:
Solución:
| #1| #2| #3| | | | #4| #1| #2| | | | #3| #4| > | | | | | | | | H1 |---|---|---| | | |---|---|---| | | |---|---|---| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #1| __| __| | | | __| __| __| | | | #2| #3| #4| #1| #2| #3| #4| H2 | | | |---|---|---| | | |---|---|---| | | |---|---|---|---|---|---|---| | | | | | | | | | | | | | | | | | | | | | | | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Posible solución:
Los hilos comparten variables por lo que la variable i está siendo compartida por ambos hilos. Además, al ser los cerrojos un control de concurrencia de espera activa, tiene que comprobar continuamente la condición que me permite acceder a la sección crítica. En un bucle for, el incremento se hace una vez realizada la iteración, por lo que tendrá que comprobar en la instrucción 1 si el contador cumple la condición o no. Dicho esto y si no me equivoco la solución sería la siguiente:
| #1| #2| #3| | | | #4| #1| #2| | | | #3| #4| #1| | | | | | H1 |---|---|---| | | |---|---|---| | | |---|---|---| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #1| #2| #2| | | | #2| #2| #2| | | | #2| #3| #4| #1| | H2 | | | |---|---|---| | | |---|---|---| | | |---|---|---|---| | | | | | | | | | | | | | | | | | | | | | | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Posible solución2: Lo que explicas esta muy bien, pero creo que la condición que expones en tu apartado es i=<2, cuando el ejercicio pide i<2. Por lo que habria que cortar un trozo, ¿no?
| #1| #2| #3| | | | #4| #1| #1| | | | | | | | | | | | H1 |---|---|---| | | |---|---|---| | | |---|---|---| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #1| #2| #2| | | | #2| #3| #4| | | | | | | | | H2 | | | |---|---|---| | | |---|---|---| | | |---|---|---|---| | | | | | | | | | | | | | | | | | | | | | | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20