Resultados 1 al 5 de 5

Tema: duda con el algoritmo de Lamport's Bakery

  1. #1

    Predeterminado duda con el algoritmo de Lamport's Bakery

    Buenas a todos, tengo dificultad para entender algunas cosas del algoritmo de Lamport's Bakery, para empezar, no comprendo por que tengo que setear y resetear un flag para tomar un número, y después no entiendo el último while donde elijo el número menor o el pid, así que alguien podría por favor mandarme un código de C o C++ con el algoritmo de Lamport's Bakery? Que sea simple, no es necesario que esto sea muy complicado o que tenga objetos, con arreys y datos primitivos está bien, he buscado en internet, pero solo he conseguido en Java y otros lenguajes, y creo que entendería mejor si estuviera en C++.

    Gracias.

  2. #2
    Con domicilio en Noticias3d.com Avatar de eXteR
    Ubicación
    Tarragona
    Edad
    38
    Mensajes
    7,650

    Predeterminado Re: duda con el algoritmo de Lamport's Bakery

    Puedes poner una captura y señalar las cosas que no entiendes?
    Ryzen 3900X - RL Custom (420+280) - MSI MEG X570 ACE - 16Gb FlareX 3600 CL16 - MSI RTX 2080Ti Lightning
    WD Black SN750 NVMe 1TB - Samsung 860 EVO 1TB - BeQuiet Straight Power 800W - AOC Q27G2U
    Phanteks Evolv X - Logitech G513- Logitech G403 - Sennheiser Game One -
    Edifier R1280DB

  3. #3

    Predeterminado Re: duda con el algoritmo de Lamport's Bakery

    Cita Iniciado por eXteR Ver mensaje
    Puedes poner una captura y señalar las cosas que no entiendes?
    a ver, el algoritmo de Lamport's Bakery sirve para introducir los procesos en la sección crítica, así que es un algoritmo de scheduling, y voy a escribir el pseudocódigo.

    Código:
    //Tenemos 2 array, uno es el numero de "turno", el segundo es de flags
    
    Num[N] = {0,0,...,0}
    flag[N] = {0,0,...,0}
    
    //Proceso genérico P Número i:
    
    flag[i]=1
    Num[i] = 1+max{Num[]}  //necesito un ciclo for para calcular el numero máximo de "turnos" o "tickets"
    flag[i]=0
    
    //empezamos por aquí, no comprendo por que hay que usar estos flags... por que no calculamos el max directamente y asignamos un turno?
    
    for{j=0; j<=N-1; ++j}
    { while(flag[j]==1){}
       while(Num[j] != 0 && <Num[j],j> < <Num[i],i>){} //como haría esta parte en C++?
    
    //después de aquí, ejercutamos la sección crítica
    
    Num[i]=0;
    //fin de la sección crítica
    el segundo While en teoría compruebo si el proceso j está interesado en entrar en su sección crítica y de ser así, debo verificar entonces si el proceso actual i tiene un número inferior, y si ambos tienen el mismo número, el problema se debería resolver con el pid, pero no entiendo funciona esto, porque si ambos tienen el mismo número, pasará siempre el que tenga el pid inferior, y si tengo muy mala suerte y constantemente obtengo race condition , entonces el que tenga el pid superior nunca entrará en la sección crítica y sufriré de starvation.

    Si alguien me explica mejor este algoritmo, estaré agradecida, de hecho, un ejemplo simple en C++ me ayudaría mucho.

  4. #4
    Con domicilio en Noticias3d.com Avatar de eXteR
    Ubicación
    Tarragona
    Edad
    38
    Mensajes
    7,650

    Predeterminado Re: duda con el algoritmo de Lamport's Bakery

    Cita Iniciado por monica_aguilar Ver mensaje
    a ver, el algoritmo de Lamport's Bakery sirve para introducir los procesos en la sección crítica, así que es un algoritmo de scheduling, y voy a escribir el pseudocódigo.

    Código:
    //Tenemos 2 array, uno es el numero de "turno", el segundo es de flags
    
    Num[N] = {0,0,...,0}
    flag[N] = {0,0,...,0}
    
    //Proceso genérico P Número i:
    
    flag[i]=1
    Num[i] = 1+max{Num[]}  //necesito un ciclo for para calcular el numero máximo de "turnos" o "tickets"
    flag[i]=0
    
    //empezamos por aquí, no comprendo por que hay que usar estos flags... por que no calculamos el max directamente y asignamos un turno?
    
    for{j=0; j<=N-1; ++j}
    { while(flag[j]==1){}
       while(Num[j] != 0 && <Num[j],j> < <Num[i],i>){} //como haría esta parte en C++?
    
    //después de aquí, ejercutamos la sección crítica
    
    Num[i]=0;
    //fin de la sección crítica
    el segundo While en teoría compruebo si el proceso j está interesado en entrar en su sección crítica y de ser así, debo verificar entonces si el proceso actual i tiene un número inferior, y si ambos tienen el mismo número, el problema se debería resolver con el pid, pero no entiendo funciona esto, porque si ambos tienen el mismo número, pasará siempre el que tenga el pid inferior, y si tengo muy mala suerte y constantemente obtengo race condition , entonces el que tenga el pid superior nunca entrará en la sección crítica y sufriré de starvation.

    Si alguien me explica mejor este algoritmo, estaré agradecida, de hecho, un ejemplo simple en C++ me ayudaría mucho.
    No conozco ese algoritmo, aunque he buscado un poco de info.

    https://www.geeksforgeeks.org/bakery...nchronization/

    Creo que está muy bien explicado, no se si te sirve.
    Ryzen 3900X - RL Custom (420+280) - MSI MEG X570 ACE - 16Gb FlareX 3600 CL16 - MSI RTX 2080Ti Lightning
    WD Black SN750 NVMe 1TB - Samsung 860 EVO 1TB - BeQuiet Straight Power 800W - AOC Q27G2U
    Phanteks Evolv X - Logitech G513- Logitech G403 - Sennheiser Game One -
    Edifier R1280DB

  5. #5

    Predeterminado Re: duda con el algoritmo de Lamport's Bakery

    Cita Iniciado por eXteR Ver mensaje
    No conozco ese algoritmo, aunque he buscado un poco de info.

    https://www.geeksforgeeks.org/bakery...nchronization/

    Creo que está muy bien explicado, no se si te sirve.
    Hola, disculpa que no respondí antes, pero ese link me ayudó muchísimo, ahora está todo bastante claro, muchas gracias

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •