Skip to content

Instantly share code, notes, and snippets.

@ACruz91
Created December 11, 2012 17:31
Show Gist options
  • Save ACruz91/4260492 to your computer and use it in GitHub Desktop.
Save ACruz91/4260492 to your computer and use it in GitHub Desktop.
Pseudocódigo Lavabo
sem_t mujeres, hombres, contadores
boolean hombres := false, mujeres := false // hombres/mujeres dentro (booleano)
int personasdentro := 0
int nh := 0, nm := 0 // nh-> hombres esperando, nm-> mujeres esperando
init(contadores, 1)
init(hombres, 0)
init(mujeres, 0)
---------------
mujeres
---------------
wait(contadores)
nm++
post(contadores)
if(hombres || personasdentro == 3)
wait(mujeres)
wait(contadores)
nm--
personasdentro++
mujeres = true
post(contadores)
sleep(5) // tiempo dentro
wait(contadores)
personasdentro--
post(contadores)
if(nm>0)
post(mujeres)
else if(nh > 0) {
wait(contadores)
mujeres = false
post(contadores)
post(hombres)
}else{
wait(contadores)
mujeres = false
post(contadores)
}
---------------
hombres
---------------
wait(contadores)
nh++
post(contadores)
if(mujeres || personasdentro == 3)
wait(hombres)
wait(contadores)
nh--
personasdentro++
hombres = true
post(contadores)
sleep(5) // tiempo dentro
wait(contadores)
personasdentro--
post(contadores)
if(nh>0)
post(hombres)
else if(nm > 0) {
wait(contadores)
hombres = false
post(contadores)
post(mujeres)
}else{
wait(contadores)
hombres = false
post(contadores)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment