1 of 12

Ejercicio 4

Lenguajes de Programación I

Parcial 2022

2 of 12

variable ‘a’ local a cada thread

variable ‘b’ es global ambos threads

variable ‘c’ una por cada ejecución de thread

3 of 12

Preguntas típicas que uno se debe hacer…

  • ¿Están las impresiones ordenadas por hilo o no siguen un orden?

Para cada una de las salidas, hay que preguntar:

  • ¿Cuándo se corta la ejecución?

  • ¿Cuándo hay una determinada cantidad de impresiones?

  • ¿Qué variable hace que se corte la ejecución?

4 of 12

“Sería ‘a’ ya que se corta antes de que la impresión de ‘a’ llegue a 2.

(en 1 ‘b’ llega a 3, y en 2 ambas imprimen b=2, y si fuera ‘c’ sería infinito)”

5 of 12

“Sería ‘b’ ya que comparten las variables los dos hilos pero nunca llega a 3,

(solo 1 vuelve a imprimir 2. Eso nos dice que el otro hilo se frena porque b<2 no se cumple)”.

nt=350 arranca con b=2

6 of 12

“Sería ‘c’ ya que cada vez que se vuelve a llamar al hilo se crea una nueva variable y por eso sigue indefinidamente”.

7 of 12

  • Recurso compartido que puede manejar un semáforo (variables)

  • Entonces, el semáforo se debe activar antes de modificarlas.

En los casos que no hay semáforo, pero suponiendo uno …

8 of 12

Donde hay conflicto por recurso compartido?

variable ‘a’ local a cada thread

variable ‘b’ es global ambos threads

variable ‘c’ una por cada ejecución de thread

Error común: considerar las salidas donde no hay conflicto (1, 3, 5)

Entonces, el semáforo se debe activar antes de modificarlas.

En los casos que no hay semáforo, pero suponiendo uno …

9 of 12

Donde hay conflicto por recurso compartido?

variable ‘a’ local a cada thread

variable ‘b’ es global ambos threads

variable ‘c’ una por cada ejecución de thread

Error común: considerar las salidas donde no hay conflicto (1, 3, 5)

Entonces, el semáforo se debe desactivar después de modificarlas.

En los casos que no hay semáforo, pero suponiendo uno …

10 of 12

global integer glob = 0;

glob++;

glob

glob sería equivalente a ‘b’ dado que ambos threads la compartirán

Salida asociada con VAR = ‘a’

Salida asociada con VAR = ‘b’

Salida asociada con VAR = ‘c’

11 of 12

global ref integer r = new integer;

*r++;

*r

glob sería equivalente a ‘b’ dado que ambos threads la compartirán

Salida asociada con VAR = ‘a’

Salida asociada con VAR = ‘b’

Salida asociada con VAR = ‘c’

12 of 12

Se incrementa en cada llamado

‘Var’ no debe cortar la ejecución