Archivo diario: 3 de May de 2012

Lector-Escritor

lector:
consulta(…){

     enterRead();
     …
     exitRead();
}

escritor:

modificacion(…){
     
     enterWrite();
     …
     exitWrite();
}
-Lectura en paralelo
-escritura en exclusión mutura con otras lect. o escrit.
Sol con monitores

nMonitor c; /*=nMakeMonitor*/

int readers=0;
int writing=False;

void enterRead(){
     nEnter(c);
     while(writing)
          [nWait(c);]
     reader++;
     nExit(c);
}

void exitRead(){
     nEnter(c);
     reader–;
     [nNotifyAll(c);]
     nExit(c);
}

void enterWrite(){
     nEnter(c);
     while(readers>0||writing)
          [nWait(c);]
     writing=TRUE;
     nExit(c);
}

void exitWrite(){
     nEnter(c)
     writing=FALSE;
     [nNotifyAll(c);]
     nExit(c);
}
– Nunca hacer busy-waiting pq es ineficiente y si se hace mientras esta tomado un monitor, nunca se va a liberar (deadlock)

Fairness(justicia): ausencia de hambruna
Estrategia para lograr soluciones «fair» (justa)
enterWrite enterWrite enterWrite (Pendiente) enterWrite
No puede entrar ninguno que sigue si uno queda pendiente
Estrategia: Autorizar entradas en orden FIFO (First In First Out)
– Metáfora de la Isapre
nMonitor c; /*=nMakeMonitor*/

int readers=0;
int writing=False;
int visor=0; dist=0;

void enterRead(){
     int miturno;
     nEnter(c);
     miturno=dist++;
     while(writing||visor!=miturno)
          nWait(c);
     readers++;
     visor++; nNotifyAll(c);
     nExit(c);
}

void exitRead(){
     nEnter(c);
     reader–;
     nNotifyAll(c);
     nExit(c);
}

void enterWrite(){
     int miturno;
     nEnter(c);
     miturno =dist++
     while(writing || readers>0 ||visor!=miturno)
          nWait(c);
     writing=TRUE;
     visor++; nNotifyAll(c); (no es estrictamente necesario este notify all)
     nExit(c);
}

void exitWrite(){
     nEnter(c)
     writing=FALSE;
     nNotifyAll(c);
     nExit(c);
}
-Solucion eficiente eliminando los writing de los read
-Ejercios resueltos en el apunte en la pagina del profe
-Controles sin apuntes, con torpedo de una pagina
Ejercicio: Implementar un semáforo a partir de monitores.
– No necesariamente FIFO
– Que sea FIFO