Solución de los ejercicios de concurrencia

De Wiki de Sistemas Operativos
Revisión del 18:32 9 may 2011 de JCGarrido (discusión | contribuciones) (Corregido Observación)
Saltar a: navegación, buscar
      | #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--Jherrera:

      | #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

Yo creo que esta bien ya que es i<2 y empieza con i = 0 --Luidela1 15:35 9 may 2011 (UTC)


Observación: --> Me parece que al ser dos hilos diferentes,aunque compartan el mismo código, las variables son individuales para cada hilo, con lo que cada hilo hace el bucle for completo,quedando la siguiente solución:

      | #1| #2| #3|   |   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |   |   |   |   |
H1    |<--|---|---|   |   |   |---|---|---|   |   |   |---|---|-->|   |   |   |   |   |   |   |   |
      |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
      |   |   |   | #1| #2| #2|   |   |   | #2| #2| #2|   |   |   | #2| #3| #4| #1| #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 21  22  23

JCGarrido