Skip to content

Instantly share code, notes, and snippets.

@mgiagante
Last active September 8, 2017 19:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mgiagante/5444b199dc572fe66843d79e2d0d5983 to your computer and use it in GitHub Desktop.
Save mgiagante/5444b199dc572fe66843d79e2d0d5983 to your computer and use it in GitHub Desktop.
// Declara 2 arreglos de 0 a n-1 de booleans inicializados como false en todas sus posiciones.
boolean permissions[0:n-1] = ([n] false)
boolean requesters[0:n-1] = ([n] false)
process Coordinator {
while true {
int i = 0
while !requesters[i] { // Barre repetidamente el arreglo buscando un proceso que esté pidiendo entrar a su sección crítica.
i = (i + 1) MOD n
}
permissions[i] = true // Da permiso al proceso i para entrar a su sección crítica.
requesters[i] = false // Como ya le dió permiso, lo desmarca de los que estan pidiendo permiso.
while permissions[i] { // Espera a que el proceso en sección crítica le avise que terminó.
skip
}
}
}
process Worker[i=0 to n-1] {
// Non-Critical section
requesters[i] = true // Avisa que quiere entrar a su sección crítica.
while !permissions[i] { // Mientras no se le dé permiso a él, se queda esperando.
skip
}
// Critical Section
permissions[i] = false // Avisa que terminó
// Non-Critical section
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment