0% encontró este documento útil (0 votos)
142 vistas

Concurrente 2021 1

Este documento presenta 5 ejercicios sobre conceptos de computación concurrente como bloqueo, semáforos y barreras. El primer ejercicio trata sobre implementaciones de bloqueo con condiciones para evitar despertares perdidos o ficticios. El segundo ejercicio involucra el uso de semáforos para garantizar exclusión mutua y prevenir comportamientos inadecuados. El tercer ejercicio aborda la solución al problema del productor-consumidor. El cuarto ejercicio propone resoluciones variadas relacionadas con semáforos y deadlocks

Cargado por

Carlo Isaac
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
142 vistas

Concurrente 2021 1

Este documento presenta 5 ejercicios sobre conceptos de computación concurrente como bloqueo, semáforos y barreras. El primer ejercicio trata sobre implementaciones de bloqueo con condiciones para evitar despertares perdidos o ficticios. El segundo ejercicio involucra el uso de semáforos para garantizar exclusión mutua y prevenir comportamientos inadecuados. El tercer ejercicio aborda la solución al problema del productor-consumidor. El cuarto ejercicio propone resoluciones variadas relacionadas con semáforos y deadlocks

Cargado por

Carlo Isaac
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 3

COMPUTACIÓN CONCURRENTE

EXAMEN 2: Bloqueo, Semáforos y Barreras

Prof. Manuel Alcántara Juárez


[email protected]
Alejandro Tonatiuh Valderrama Silva José de Jesús Barajas Figueroa
[email protected] [email protected]
Luis Fernando Yang Fong Baeza Ricchy Alain Pérez Chevanier
[email protected] [email protected]

Fecha Lı́mite de Entrega: 10 de Diciembre de 2020 a las 08:00:00 CT

1. Considera la siguiente implementación, la cual no sufre del problema del despertar


perdido ni ficticio, y donde dos hilos invocan una sola vez y uno solo de los siguientes
métodos:

Initialization:
Lock mutex = new ReentrantLock();
Condition waitForAJob = mutex.newCondition();
boolean hasSignalled = false;

1. public void waitForWork() {


2. mutex.lock();
3. System.out.println("Inside WaitForWork Lock");
4. while(!hasSignalled) {
5. waitForJob.await();
6. System.out.println("WaitForWork woke up");
7. }
8. mutex.unlock();
9. }
10. public void setDataReady() {
11. mutex.lock();
12. hasSignalled = true;
13. waitForAJob.signal();
14. mutex.unlock();
15 }

a) [1.0pt] ¿Cuál de las siguientes sucesiones de instrucciones representa una eje-


cución válida? Analı́zalo desde una perspectiva teórica.

1) 1, 2, 7, 3, 4, 8, 9, 10, 1, 5, 3, 6 4) 1, 2, 3, 7, 4, 8, 9, 10, 5, 3, 6
2) 7, 1, 2, 3, 4, 8, 9, 1, 5, 6, 10 5) 1, 7, 2, 3, 4, 8, 9, 5, 10, 3, 6
3) 7, 1, 2, 3, 4, 8, 9, 5, 3, 6, 10

b) [1.0pt] Modificando hasta 3 lı́neas de código, crea una implementación que no


sufra del despertar perdido pero si del despertar ficticio. Muestra la ejecución.

1
Examen 2: Bloqueo, Semáforos y Barreras Computación Concurrente

c) [0.5pt] Modificando hasta 3 lı́neas de código, crea una implementación que


sufra del despertar ficticio y del despertar perdido. Da la ejecución para este
último caso.

2. Una empresa te acaba de contratar porque un virus (proceso) maligno invadió su


sistema y esta provocando inconsistencia de información. Tu jefe te comentó que si
se garantiza la M exclusión mutua ya no habrá problema. Sabiendo eso, te pusiste
a buscar en el código y encontraste la siguiente clase:

1. public class MExclusion implements Lock {


2. private Semaphore mutex;
3. // @param n: total number of threads
4. // @param m: allowed threads in C.S.
5. public MExclusion(int n, int m) {
6. mutex = new Semaphore(m);
7. }
8. public void lock() {
9. mutex.acquire();
10. }
11. public void unlock() {
12. mutex.release();
13. }
14. }

a) [1.0pt] Sabiendo que el virus es uno de los procesos, argumenta como podrı́a
violar la propiedad de la M exclusión. Muestra la ejecución.
b) [1.5pt] Agregando únicamente código y sin usar spins, modifica la clase para
prevenir un comportamiento inadecuado. HINT: Puedes lanzar una excepción
si se detecta un problema. Argumenta porque funciona tu solución.

3. Considera el problema del Productor/Consumidor para dos hilos, en donde el pro-


ductor tiene espacio ilimitado, y ambos hilos invocan el método solve, ya sea para
producir o consumir.

a) [1.0pt] Da una implementación para el método void solve que solucione el


problema utilizando un solo semáforo.
b) [1.0pt] ¿Si el semáforo es débil o fuerte, podrı́a ocurrir que el productor o consu-
midor se muera de inanición tratando de ejecutar el método solve? Argumenta
tu respuesta.
c) [1.0pt] Supón ahora que los hilos invocan una sola vez el método solve. Bajo
esta nueva suposición, ¿Se podrı́a utilizar un mutex en lugar del semáforo para
resolver el problema? Argumenta tu respuesta.

4. [1.0pt]: Resuelve uno solo de los siguientes ejercicios:

a) Da una implementación con a lo más 10 lineas de código, en la que si se utilizan


semáforos débiles se tenga hambruna, pero si se usan semáforos fuertes no. No
debe de haber deadlocks.
b) Muestra una ejecución en donde los hilos logren pasar la barrera del código
descrito en la siguiente figura.

2
Examen 2: Bloqueo, Semáforos y Barreras Computación Concurrente

c) Muestra una ejecución en donde los hilos se queden en deadlock utilizando el


código descrito en siguiente figura.

// 4 hilos continuamente invocan el método wait.


Initialization:
int hasPassed = 0;
Semaphore open = new Semaphore(0);
final int n;

1. public void wait() {


2. synchronized(this) { hasPassed++; }
3. if (hasPassed == n) open.release();
4. open.acquire();
5. open.release();
6. synchronized(this) { hasPassed--; }
7. if (hasPassed == 0) open.acquire();
8. }

5. Haz sido contrado por Greenpeace para intentar incrementar la población de las ba-
llenas que han tenido problemas de sincronización para encontrar pareja. El truco es
que para tener hijos, se necesitan tres ballenas, un macho, una hembra y otra para ju-
gar al casamentero, literalmente, para juntar las otras dos ballenas y avisarles cuando
el acto ha concluido. Cada ballena se representa por un proceso independiente y es ne-
cesario implementar los siguientes métodos Macho(), Hembra(), Casamentero().
Una ballena macho invoca Male() y espera hasta que haya una hembra y un casamen-
tero; del mismo modo, una ballena hembra debe esperar hasta que estén presentes
una ballena macho y un casamentero. Una vez que los tres están presentes, los tres
finalizan la invocación del método.

a) Opción A [2.0pt]: Da una implementación para los 3 métodos utilizando


únicamente semáforos. Argumenta porque es correcta y muestra un ejemplo.
b) Opción B [1.0pt]: Da una implementación para los 3 métodos utilizando
únicamente candados. Argumenta porque es correcta y muestra un ejemplo.

También podría gustarte