lock_lp (tipo_flag flag)
{
BOOL entrar= 0;
while (!entrar) {
lock(cerrojo_flags);
if (flag) {
unlock(cerrojo_flags);
dormir(flag);
}
else {
entrar= 1;
flag= 1;
unlock(cerrojo_flags);
}
}
}
unlock_lp (tipo_flag flag)
{
lock(cerrojo_flags);
flag= 0;
despertar(flag);
unlock(cerrojo_flags);
}
int cuenta= 0;
tipo_flag flag_lleno, flag_vacio;
tipo_cerrojo mutex;
semaforo()
{
int elemento;
while (1) {
producir_elemento(&elemento);
while (cuenta == N)
dormir(flag_lleno);
lock(mutex);
dejar_elemento(elemento);
cuenta= cuenta+1;
unlock(mutex);
if (cuenta == 1)
despertar(flag_vacio);
}
}
semaforo2()
{
int elemento;
while (1) {
while (cuenta == 0)
dormir(flag_vacio);
lock(mutex);
retirar_elemento(&elemento);
cuenta= cuenta-1;
unlock(mutex);
if (cuenta == N-1)
despertar(flag_lleno);
consumir_elemento(elemento);
}
}
struct semaf mutex, acceso, escri;
int nl;
ini_semaforo(mutex, 1);
ini_semaforo(acceso, 1);
ini_semaforo(escri, 1);
semaforo ()
{
while (1) {
bajar(escri);
subir(escri);
bajar(mutex);
nl++;
if (nl == 1) bajar(acceso);
subir(mutex);
leer_dato();
bajar(mutex);
nl--;
if (nl == 0) subir(acceso);
subir(mutex);
usar_dato();
}
}
semaforo2 ()
{
while (1) {
preparar_dato();
bajar(escri);
bajar(acceso);
escribir_dato();
subir(acceso);
subir(escri);
}
}
En el progrma anterior se manejaron recursos de las tareas de lectura necesarias en la cual el se porcecede al acceso simultaneo de varios procesos donde la solucion no proporciona ninguna prioridad donde tambien cabe mencionar que se sube y baja en semaforos.
No hay comentarios:
Publicar un comentario