Duda Lectores y Escritores

Duda Lectores y Escritores

de Gennaro Vincenzo Monetti Cracco -
Número de respuestas: 4

En la presentación de uso de semáforos, en la parte de lectores y escritores, variante II, se agrega la siguiente restricción: "Cuando hay lectores leyendo y llega un escritor, éste debe tener prioridad sobre los próximos lectores que lleguen".

Con la solución de abajo, si algún lector accede a try, el primer escritor que entre se va a quedar esperando en P(try) hasta que dicho lector haga V(try). El problema es que mientras el lector no libera el try, pueden llegar más lectores que se queden esperando en P(try) al mismo tiempo que el escritor. Cuando el lector libere try, podría seguir ejecutando tanto el escritor como cualquiera de los lectores que estaban esperando.

¿Hay algo de lo que no me esté dando cuenta?


En respuesta a Gennaro Vincenzo Monetti Cracco

Re: Duda Lectores y Escritores

de Jorge Merlino -

Eso es así, el semáforo ese se lo queda el primer escritor para bloquear a los lectores pero primero tiene que poder obtenerlo. Hasta que no lo tenga, el sistema no tiene forma de saber que el escritor está ahí. 

Hay otras herramientas más avanzadas como ADA donde podemos saber si alguien está esperando por un recurso para darle prioridad pero con semáforos no queda otra que esperar que obtenga algún semáforo para poder darle la prioridad.

Saludos

En respuesta a Jorge Merlino

Re: Duda Lectores y Escritores

de Sergio Nesmachnow -
Efectivamente, la clave es que los lectores luego de obtener try, actualizan la variable de cantidad de lectores y si pueden leer inmediatamente hacen V(try), para permitir que un escritor que llegue luego pueda acceder y "notificar" al sistema que está esperando, como comentó Jorge. Si ya había un escritor esperando, no podrán acceder hasta que el escritor haga su trabajo y realice V(try), si es el último escritor.
En respuesta a Sergio Nesmachnow

Re: Duda Lectores y Escritores

de Esteban Normey Rieta -
Buenas,
Respecto al escritor que espera conjuntamente con los lectores por el try (en el caso de que haya algun lector en la region del mutexL). Mientras no se haga el V(try), van llegando más lectores.
La competencia por el try en este caso ya no sería 1-1 (lector-escritor), sino que las probabilidades de que un lector gane el try son más altas puesto que escritor esperando sí solo hay 1 (por el mutexE), mientras que escritores pueden haber varios. ¿Esto no violaría la condición de prioridad para escritores?
Por lo que entiendo, este problema se comenta en esta discusión: https://eva.fing.edu.uy/mod/forum/discuss.php?d=173374
Y por lo que vi, se pone el mutexLector antes del try como solución.
No sé si quedó bien planteada mi duda, pero básicamente es: ¿la competencia en este caso lector-escritor es 1-1, no se viola la condición si así no fuera?
Saludos!