É possibile risolvere il problema Produttore-Consumatore utilizzando l'algoritmo di Peterson?

di il
1 risposte

É possibile risolvere il problema Produttore-Consumatore utilizzando l'algoritmo di Peterson?

Per intenderci, il problema Produttore-Consumatore ipotizza una situazione in cui si hanno due processi che si scambiano una coppia di dati:
• P1: Scrive i dati nel buffer.
• P2: Legge i dati dal buffer.

1 Risposte

  • Re: É possibile risolvere il problema Produttore-Consumatore utilizzando l'algoritmo di Peterson?

    Tl:dr Sì si può.

    Pseudo-codice
    //produttore (j)
    flag[j] = true;
    turno = i;
    while (flag == true && turno == i) ; //busy waiting: se il produttore vuole consumare un oggetto ed è il suo turno aspetto
    foo_producer(); // codice eseguito dal produttore
    flag[j] = false; //adesso il produttore è fuori dalla zona critica

    //------

    //consumatore (i)
    flag = true;
    turno = j;
    while (flag[j] == true && turno == j) ;
    foo_consumer();
    flag = false;

    L'algoritmo di peterson viene usato per sincronizzare due processi. Utilizza due variabile, un array di booleani di lunghezza 2 (2 celle) e una variabile int turno.
    Nella soluzione i rappresenta il consumatore e j rappresenta il produttore (come da commenti).
    Inizialmente i flag sono settati a false, quando un processo vuole eseguire una zona critica imposta il suo flag a true e turno nell'indice dell'altro processo. Questo significa che il processo vuole eseguire ma permette all'altro di essere eseguito prima. Il processo esegue una busy waiting fintantoché l'altro processo non ha terminato.
    Dopo aver eseguito la sezione critica, imposta il suo flag a falso indicando che ha terminato le sue operazioni.
Devi accedere o registrarti per scrivere nel forum
1 risposte