Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Panaderia Lamport
Panaderia Lamport
AUTORES:
DOCENTE:
El problema:
Una panadería tiene una variedad de panes y pasteles vendidos por n vendedores.
Cada cliente toma un número al entrar y espera hasta oír su número. Cuando el
vendedor se desocupa, llama al siguiente número
▪ El algoritmo, toma su nombre de la costumbre de las panaderías, donde
las personas obtiene un número de turno (único) y lo utilizan para que el
vendedor les vaya atendiendo en orden de llegada.
▪ El cliente obtiene su número de turno. El vendedor sólo puede atender a
una persona al mismo tiempo, lo que concuerda con el uso de forma
exclusiva: el recurso es el vendedor y la sección crítica de un cliente es lo
que realiza mientras es atendido.
▪ El sistema mantiene un número que refleja el número del cliente que se
está atendiendo. Los clientes deben esperar. Una vez que se acaba con un
cliente, la variable global se incrementa y el cliente que tenga ese número
pasa a ser atendido.
▪ Cuando termina, el cliente se desprende de su boleto y se dedica a
realizar cualquier otra actividad libremente, ya que no se encuentra más
en su sección crítica. Si más tarde quiere volver a comprar, tendrá que
obtener un nuevo número.
Algoritmo de solución:
El algoritmo para solucionar este problema sería que cada cliente sea un hilo,
identificándose con un número único i. Los hilos se deben coordinar para
decidir en cada momento qué hilo tiene derecho a ejecutar su código de
sección crítica.
El desempate se realiza así: Si dos o más hilos tienen el mismo número de turno,
tiene más prioridad el hilo que tenga el identificador con un número más bajo.
Como no puede haber dos hilos con el mismo identificador.
#include <stdio.h>
#include <stdbool.h>
#include <pthread.h>
int max_number = 0;
int i;
max_number = number[i];
number[process] = max_number + 1;
eligiendo[process] = 0;
int other;
number[process] = 0;
}
void *process(void *arg) {
int i, other;
lock(process_id);
unlock(process_id);
return NULL;
int main() {
int i;
process_ids[i] = i;
}
//Espera a que todos los hilos finalicen usando pthread_join.
pthread_join(threads[i], NULL);
return 0;
} //fin main
Ejecución: