Solo tienen un solo lock para proteger su unbounded buffer entonces si suponemos que un consumidor toma el lock y luego encuentra que no puede consumir entonces se entra en el ciclo y trata de seguir checando pero nunca suelta el lock, entonces si el productor quiere poner una nueva unidad en el buffer no puede tomar el lock porque lo tiene algun consumidor que esta esperando que un productor ponga algo en el buffer pero este no puede entonces entras en un deadlock.
Creo que deberias de tener un lock para los consumidores y otro lock para los productores de manera que los productores solo bloqueen a los productores y los consumidores solo bloqueen a los consumidores, y asi los productores hagan su chamba independientemente si los consumidores pueden o no consumir y al reves tambien.
Sería algo mas completo si usas un lock para productor (bloqueo solo productores), otro para consumidor(bloqueo solo consumidores) y un tercero que fuera compartido productor/consumidor para que haga exclusión mutua entre productores y consumidores.
+1 partially presented in English +1 diapositivas en inglés +1 PC - dicen que es unbounded, pero es bounded lo que presentan +1 discusión de calidad +2 DF +1 lock +1 CV => 8 puntos Puntos extra individuales para Everardo, Jorge y José
i think.. that if you solve on that way the problem of deadlocks, one of them can die of starvtion, in the worst scenario.
ReplyDeleteSolo tienen un solo lock para proteger su unbounded buffer entonces si suponemos que un consumidor toma el lock y luego encuentra que no puede consumir entonces se entra en el ciclo y trata de seguir checando pero nunca suelta el lock, entonces si el productor quiere poner una nueva unidad en el buffer no puede tomar el lock porque lo tiene algun consumidor que esta esperando que un productor ponga algo en el buffer pero este no puede entonces entras en un deadlock.
ReplyDeleteCreo que deberias de tener un lock para los consumidores y otro lock para los productores de manera que los productores solo bloqueen a los productores y los consumidores solo bloqueen a los consumidores, y asi los productores hagan su chamba independientemente si los consumidores pueden o no consumir y al reves tambien.
Sería algo mas completo si usas un lock para productor (bloqueo solo productores), otro para consumidor(bloqueo solo consumidores) y un tercero que fuera compartido productor/consumidor para que haga exclusión mutua entre productores y consumidores.
ReplyDeleteBuenas observaciones :)
ReplyDelete@Colli:
ReplyDeleteEl consumidor tiene la condicion de que si en el buffer hay menos de 2 unidades no consuma entonces sale del while y regresa el lock.
Y checaré lo de un lock para consumidor y otro para productor. Gracias
+1 partially presented in English
ReplyDelete+1 diapositivas en inglés
+1 PC - dicen que es unbounded, pero es bounded lo que presentan
+1 discusión de calidad
+2 DF
+1 lock
+1 CV
=> 8 puntos
Puntos extra individuales para Everardo, Jorge y José