Problema universidad
Publicado por quiup (2 intervenciones) el 01/12/2006 18:54:16
Me han puesto este problema en la universidad... Si lo soluciono tengo la asignatura aprobada. Aquel que lo haga, le recompensaré con 150€! Adelante...
Enunciado
La implementación de monitores Signal and Continue (SC) mediante semáforos vista en clase, a pesar de ser didáctica, a veces se comporta de forma incorrecta.
Se pide:
* Que describáis claramente y detalladamente las causas del error y las situaciones en que se manifesta.
* Una solución: una realización correcta de la clase MonitorSC (monitors Signal and Continue) a partir de semáforos.
Especificación de las clases MonitorSC i Condition que tiene que cumplir la realización correcta:
public class MonitorSC {
protected MonitorSC();
protected void mon_enter();
protected void mon_exit();
protected Condition create_cond();
protected void wait_cond(Condition c);
protected void signal_cond(Condition c);
protected void signal_cond_all(Condition c);
}
public class Condition {
}
Realización de monitores SC vista en clase
(NOTA: en algunos grupos se ha visto otras muy similares)
public class MonitorSC {
private Semaphore mutex;
protected MonitorSC()
{
mutex = new Semaphore(1);
}
protected void mon_enter()
{
mutex.P();
}
protected void mon_exit()
{
mutex.V();
}
protected Condition create_cond()
{
return new Condition();
}
protected void wait_cond(Condition c)
{
++ c.waiting;
mutex.V();
c.queue.P();
mutex.P();
}
protected void signal_cond(Condition c)
{
if (c.waiting > 0) {
c.waiting --;
c.queue.V();
}
}
protected void signal_cond_all(Condition c)
{
while (c.waiting > 0) {
c.waiting --;
c.queue.V();
}
}
}
public class Condition {
Semaphore queue;
int waiting;
Condition()
{
queue = new Semaphore(0);
}
}
Enunciado
La implementación de monitores Signal and Continue (SC) mediante semáforos vista en clase, a pesar de ser didáctica, a veces se comporta de forma incorrecta.
Se pide:
* Que describáis claramente y detalladamente las causas del error y las situaciones en que se manifesta.
* Una solución: una realización correcta de la clase MonitorSC (monitors Signal and Continue) a partir de semáforos.
Especificación de las clases MonitorSC i Condition que tiene que cumplir la realización correcta:
public class MonitorSC {
protected MonitorSC();
protected void mon_enter();
protected void mon_exit();
protected Condition create_cond();
protected void wait_cond(Condition c);
protected void signal_cond(Condition c);
protected void signal_cond_all(Condition c);
}
public class Condition {
}
Realización de monitores SC vista en clase
(NOTA: en algunos grupos se ha visto otras muy similares)
public class MonitorSC {
private Semaphore mutex;
protected MonitorSC()
{
mutex = new Semaphore(1);
}
protected void mon_enter()
{
mutex.P();
}
protected void mon_exit()
{
mutex.V();
}
protected Condition create_cond()
{
return new Condition();
}
protected void wait_cond(Condition c)
{
++ c.waiting;
mutex.V();
c.queue.P();
mutex.P();
}
protected void signal_cond(Condition c)
{
if (c.waiting > 0) {
c.waiting --;
c.queue.V();
}
}
protected void signal_cond_all(Condition c)
{
while (c.waiting > 0) {
c.waiting --;
c.queue.V();
}
}
}
public class Condition {
Semaphore queue;
int waiting;
Condition()
{
queue = new Semaphore(0);
}
}
Valora esta pregunta


0