Sei sulla pagina 1di 5

Esercizio 1 (parte 1)

Scrivere unapplicazione concorrente per il calcolo


della somma degli elementi contenuti in una matrice.
P1 P2 P_n

Colonna_1 Colonna_2 Colonna_n


riga_1
riga_2

riga_m

sum1 sum2 sum_n P somma


totale
sums
Esercizio 1 (parte 2)

Vincoli

La matrice e il buffer sums devono essere


immagazzinati in memoria condivisa

I processi P_i accedono al buffer sums per la somma


della colonna i-sima in mutua esclusione senza alcun
vincolo sulla posizione (e.s. Il processo P2 termina per
primo e scrive nella casella sums[0]; il processo P1
finisce per secondo e scrive nella casella sums[1], ecc.)
Esercizio 1 (parte 3)

Il processo P (per la somma totale) resta in attesa


della terminazione di tutti i processi P_i.
Implementare tale attesa con una wait_for_zero

Il processo padre (diverso da P) attende la


terminazione di tutti i processi e restituisce a
video il totale calcolato da P (anchesso
memorizzato in shm)
Esercizio 2 (parte 1)

P1 L1
C1
P2 L2
B2
P3 L3
C2
P4 L4
B1 - buffer di B2 - buffer di
interi circolare interi di dim 1
di dim 2
Esercizio 2 (parte 2)
Vincoli (risolvere con semafori)

Abbiamo 4 produttori che fanno 2 produzioni, 2 consumatori che fanno 4


consumi e 4 processi che leggono dalla cella di memoria condivisa.

I produttori prima di iniziare a effettuare le produzioni si devono


sospendere per 5 secondi. Dopo ogni produzione si sospendono per un tempo
casuale tra 2s e 5s (2 + rand() % 4)

I consumatori consumano solo se ce un messaggio disponibile prima di


segnalare il consumatore devono scrivere nella cella di memoria condivisa.

Prima di leggere i lettori si mettono in attesa per 10s e andranno a leggere


il valore scritto nella cella di memoria.

Potrebbero piacerti anche