Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Las flechas entre los códigos sirven para simular el paso del CPU entre un
proceso y otro, así se crea un escenario para que los dos procesos entren en la
Región Crítica.
int flag[2];
int turn;
void main() {
flag[0] = 0;
flag[1] = 0;
turn = 0;
Paralel (process0, process1);
}
I parte
process0 (){ process1 ()
... {
while (1) { /* ciclo infinito */ ...
while (1) { /* ciclo infinito */
flag[0] = 1; /* para indicar que flag[1] = 1;
quiere entrar a la SC */ while (turn != 1) {
while (turn != 0) { while (flag[0]==1);
while (flag[1]==1); turn = 1;
turn = 0; }
} /* sección crítica */
/* sección crítica */ flag[1] = 0;
flag[0] = 0; }
... ...
} }
...
}
2da parte
process0 (){ process1 ()
... {
while (1) { /* ciclo infinito */ ...
while (1) { /* ciclo infinito */
flag[0] = 1; /* para indicar que 2 flag[1] = 1;
quiere entrar a la SC */ while (turn != 1) {
while (turn != 0) { while (flag[0]==1);
while (flag[1]); 1 turn = 1;
3 turn = 0; 4 }
} /* sección crítica */
/* sección crítica */ flag[1] = 0;
flag[0] = 0; }
... ...
} }
...
}
Cada vez que el embotellador prepara una botella, ésta se coloca en una caja, que tiene una
capacidad de 10 litros (10 botellas). Si al colocar la botella, la caja queda llena, se envía una señal
al empaquetador, que toma la caja, la sella y la guarda en un almacén. El empaquetador deposita
una nueva caja de 10 litros, totalmente vacía. Mientras el empaquetador está haciendo su labor, el
embotellador no puede colocar sus botellas, ya que en esos momentos no hay una caja disponible.
Encontrar una solución basada en semáforos que sincronice el problema de concurrencia citado.
void main() {
Paralel (embotellador, empaquetador);
semaphore empaquetador = 0, embotellador = 1;
}
Embotellador Empaquetador
while (true) { while (true) {
semWait(embotellador); semWait(empaquetador);
botella = 0; colocarcaja();
while (botella < 10) { liberarnuevacaja();
colocarbotellacaja(); semSignal(embotellador);
botella++;
} }
semSignal(empaquetador);
}
Ejercicio de los Hamsters
semaforo accederRueda;
semaforo accederComida;
main()
{
/*Arranca los procesos hamster*/
sem_init(&accederComida, 0, 3);
sem_init(&accederRueda,0, 1);
paralel(crearhamster(h1),crearhamster(h2),...,crearhamster(hn));
crearHamster(int hamster)
{
while(true) {
funcionComida();
funcionRueda();
}
Correcciones
A B C
X = X + 1; Y= X/100; Z = Y -100 ;
printf(X); W = Y – 2; A = C + D;
print (W);
Sincronizarlos, usando semáforos, de forma tal que se ejecuten de la siguiente forma:
A B C
Inicialización:
Semaphore sa=1, sb=0, sc=0;
A B C
Inicialización:
Semaphore sa=1, sb=0