Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


La programmazione concorrente, Slide di Informatica

Slide sulla programmazione concorrente

Tipologia: Slide

2022/2023

In vendita dal 21/08/2023

sebastiano-garro
sebastiano-garro 🇮🇹

5

(1)

64 documenti

1 / 13

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Programmazione
concorrente
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Anteprima parziale del testo

Scarica La programmazione concorrente e più Slide in PDF di Informatica solo su Docsity!

Programmazione

concorrente

Il problema dei produttori/consumatori

  • In questo problema individuiamo due possibili problematiche legate

alla sincronizzazione:

  • problema di cooperazione: si deve garantire che il produttore NON possa scrivere sul buffer se questo è pieno e che il consumatore non possa leggere due volte lo stesso messaggio: - sequenza corretta di accesso: inserimento-prelievo-inserimento-prelievo... - sequenze errate di accesso: prelievo-prelievo-inserimento...
  • problema di competizione: il buffer è la struttura dati condivisa e quindi il produttore e il consumatore NON devono accedere contemporaneamente a esso: bisogna garantire la mutua esclusione nell’accesso al buffer

Il problema dei produttori/consumatori

  • Un produttore, un consumatore e una singola cella di memoria:
    • Nella sua formulazione più semplice sono presenti solo due processi, il primo, il produttore, che vuole inviare informazioni scrivendo un dato (o un messaggio) in un’area di memoria condivisa (in questo esempio una singola variabile) e il secondo, il consumatore, che vuole prelevare i valori prodotti dal primo e “consumarli “
  • Un produttore e un consumatore e buffer circolare:
    • Nel caso più generale la memoria condivisa può contenere più dati (o messaggi) e viene realizzata per esempio con un buffer circolare implementato con un vettore di lunghezza DIM_BUFFER

Una soluzione in java

  • Realizziamo un monitor che regola l’accesso a una risorsa definendo

la classe Buffer, che condivide due variabili.

  • dato: contiene il dato prodotto da consumare;
  • disponibile: variabile booleana che segnala se il dato è nuovo, pronto da essere consumato.
  • Scriviamo due entry per sincronizzare gli accessi:
  • togli(): verifica se il dato è disponibile altrimenti si mette in attesa; quando può consumare “svuota il buffer” e modifica lo stato della disponibilità, quindi risveglia un thread sospeso;
  • metti(): verifica se il dato precedente è stato prelevato e in caso negativo si mette in attesa: quindi appena può inserisce un dato, aggiorna lo stato della variabile booleana e risveglia un thread sospeso

Una soluzione in java

Il problema dei lettori/scrittori

  • In un sistema sono presenti due gruppi di processi, i lettori e gli

scrittori:

  • i lettori non possono modificare i dati, ma solo prelevare in modo non distruttivo il contenuto di un buffer per elaborarlo;
  • gli scrittori possono invece produrre un dato e quindi aggiornare il contenuto del buffer.
  • NB: La situazione è diversa da quella dei produttori/consumatori

poiché in questo caso più lettori possono contemporaneamente

utilizzare un dato senza prelevarlo: quindi un lettore può accedere a

un dato anche se è già presente un altro lettore, mentre lo scrittore

deve accedere in modo esclusivo come nell’esempio precedente.

Il problema dei lettori/scrittori

  • I vincoli di mutua esclusione sono quindi:
    • fra lettori e scrittori nell’uso della risorsa: se ci sono lettori nessuno scrittore può accedere;
    • fra gli scrittori tra loro che si contendono la risorsa: un solo scrittore alla volta può accedere

Il problema del deadlock: filosofi a cena

  • Vediamo un esempio di funzionamento, supponendo che il filosofo

quando ha fame e smette di pensare si comporti nel seguente modo:

  • come prima mossa prende la forchetta a sinistra del suo piatto;
  • quindi prende quella che è alla destra del suo piatto;
  • mangia finché è sazio;
  • quindi rimette a posto, sul tavolo, le due forchette.
  • Cosa succede se contemporaneamente i cinque filosofi prendono la

forchetta di sinistra? I filosofi muoiono di fame, in quanto il sistema

andrebbe in deadlock: ciascun filosofo rimarrebbe con una sola

forchetta in mano in attesa di un evento che non si potrà mai

verificare