Examen Diciembre 2021 problema 4

Examen Diciembre 2021 problema 4

de Romina Sosa Nicolais -
Número de respuestas: 1

Buenas. Estaba realizando el problema 4 del examen de diciembre de 2021 y me surgieron algunas dudas.

En primer lugar veo que en la solucion se crea un cuarto procedimiento (ademas del niño, papaNoel y duende) donde se decidide si se tiene que descartar la carta de un niño o no. ¿Esta misma logica no podria implementarse dentro del procedimiento del niño? Donde luego de escribir una carta se fija si la cantidad de duendes disponibles en ese momento es mayor a 0, en cuyo caso procede a enviar la carta a un mailbox compartido con los duendes, y en caso contrario no hace nada, dando a entender que se descarta dicha carta.

Por otro lado, la letra menciona que un unico duende puede acceder a la bolsa de regalos a la vez. ¿Para esto no se necesitaria hacer un mailbox que multiexcluya el acceso a la bolsa? Ya que en la solucion simplemente se envian los mensajes sin tener en cuenta que haya otro duende enviando mensajes o no. En este caso pense que una solucion posible era usar el mismo mailbox donde se guarda la cantidad de regalos actuales en la bolsa para multiexcluir el acceso al mismo. 

Gracias,
Saludos.

En respuesta a Romina Sosa Nicolais

Re: Examen Diciembre 2021 problema 4

de Federico Rivero -
Hola!

Respondo entrelíneas.

En primer lugar veo que en la solucion se crea un cuarto procedimiento (ademas del niño, papaNoel y duende) donde se decidide si se tiene que descartar la carta de un niño o no. ¿Esta misma logica no podria implementarse dentro del procedimiento del niño? Donde luego de escribir una carta se fija si la cantidad de duendes disponibles en ese momento es mayor a 0, en cuyo caso procede a enviar la carta a un mailbox compartido con los duendes, y en caso contrario no hace nada, dando a entender que se descarta dicha carta.

Por temas de lógica y concurrencia no veo problema en que esa sección del código esté en el procedimiento Niño, pero por modelado del problema tiene más sentido que sea un proceso aparte. Con esta solución queda bien claro que el niño no tiene acceso a saber cuántos duendes hay disponibles, o por qué se le rechaza el regalo, o si los duendes existen. No tengo claro cómo se corrigió este examen, pero supongo que si la lógica se incluía en el procedimiento Niño no sería un error inmenso. 

Por otro lado, la letra menciona que un unico duende puede acceder a la bolsa de regalos a la vez. ¿Para esto no se necesitaria hacer un mailbox que multiexcluya el acceso a la bolsa? Ya que en la solucion simplemente se envian los mensajes sin tener en cuenta que haya otro duende enviando mensajes o no. En este caso pense que una solucion posible era usar el mismo mailbox donde se guarda la cantidad de regalos actuales en la bolsa para multiexcluir el acceso al mismo.

Bueno, acá hay que tener algo claro, hacer algo como lo siguiente no tendría sentido:

recibir(mutex_bolsa_regalos, NIL);
enviar(bolsa_regalos, r);
enviar(mutex_bolsa_regalos, NIL);

Esto es así porque el enviar ya es atómico, entonces ya está mutuoexcluido.

Otra cosa diferente es considerar si la manipulación de la cantidad de juguetes en paralelo al acceso a la bolsa es correcto. Personalmente preferiría que, como decís vos, el acceso a la bolsa se haga una vez obtenido el contenido de cant_juguetes por cuestión de modelado. Aunque también se puede argumentar que es una información externa y que se puede manejar en paralelo.

Por otro lado, creo que tendría sentido que Papá Noél accediera a los 100 juguetes sin interrupciones. Así como está puede pasar que papá noél obtenga 20 juguetes de la bolsa, luego un duende agregue otro, luego papá noél obtenga el resto, lo cual bueno, nada en la letra lo impide, pero sí es un tanto extraño desde el punto de vista del modelado de la realidad del problema.

Saludos,
Federico