Ejercicio 4
Lenguajes de Programación I
Parcial 2022
variable ‘a’ local a cada thread
variable ‘b’ es global ambos threads
variable ‘c’ una por cada ejecución de thread
Preguntas típicas que uno se debe hacer…
Para cada una de las salidas, hay que preguntar:
“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)”
“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
“Sería ‘c’ ya que cada vez que se vuelve a llamar al hilo se crea una nueva variable y por eso sigue indefinidamente”.
En los casos que no hay semáforo, pero suponiendo uno …
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 …
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 …
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’
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’
Se incrementa en cada llamado
‘Var’ no debe cortar la ejecución