PDA

View Full Version : sincronizzazione con semafori c++


ghemon_2002
14-09-2011, 00:00
Qualcuno sa aiutarmi con questi due esercizi?

1
Si consideri il seguente problema di sincronizzazione tra processi formato da un processo produttore P e da due
processi consumatore C1 e C2, che condividono un’area di memoria (buffer) con 10 locazioni.
Il processo produttore P genera ciclicamente un numero intero arbitrario e lo aggiunge al buffer di memoria
condivisa. Il processo P si pone in attesa quando tenta di accedere al buffer pieno.
Il processo C1 (C2) consuma ciclicamente un elemento del buffer. Il processo C1 (C2) può accedere al buffer
solo se il buffer stesso non è vuoto, e può consumare un elemento del buffer solo se il numero attuale di
elementi nel buffer stesso è dispari (pari).
Si proponga una soluzione con semafori al problema di sincronizzazione proposto. Si richiede la descrizione dei
dati condivisi, lo pseudocodice delle procedure Produttore() e Consumatore1() e una discussione sulle eventuali
differenze tra Consumatore2() e Consumatore1(). Si assuma l’esistenza delle procedure Genera(),
Aggiungi_Al_Buffer(int x), Estrai_Dal_Buffer(), Consuma(int x), e Consuma_Buffer() con gli ovvi significati.


2
Si consideri il seguente problema di sincronizzazione tra processi denominato problema multi-produttore/consumatore
con memoria condivisa a buffer limitato:
Sia dato un sistema di processi concorrenti composto da n>10 processi produttori P1, P2, …, Pn, e da un
processo consumatore C, che condividono un’area di memoria con 10 locazioni.
Il generico processo produttore Pi genera un numero intero arbitrario e lo deposita nel buffer di memoria
condivisa. Se Pi tenta di accedere al buffer quando quest’ultimo è pieno, allora Pi stampa tutto il contenuto del
buffer e si pone in attesa.
Il processo C consuma ciclicamente un elemento del buffer al quale può accedere solo quando il buffer stesso
non è vuoto.
Si proponga una soluzione con semafori al problema del multi-produttore/consumatore. Si richiede una descrizione
accurata dei dati e lo pseudocodice delle procedure Produci(), usata dal generico produttore per generare e depositare
un numero nel buffer (non si fanno ipotesi sulla frequenza di chiamata di Produci da parte di un produttore) e
Consumatore(). Si assuma l’esistenza delle procedure Genera(), Consuma(int x), Aggiungi_Al_Buffer(int x),
Estrai_Dal_Buffer() e Stampa_Buffer() con gli ovvi significati.


Grazie mille!!!!!!

tomminno
14-09-2011, 07:57
Quali sono i problemi che riscontri nel risolvere gli esercizi?

Vietato chiedere la risoluzione completa di progetti o esercizi per corsi di studio (http://www.hwupgrade.it/forum/showthread.php?t=1631648)
CHIUSURA DEI THREAD SENZA LINGUAGGIO/APPLICATIVO FRA PARENTESI QUADRE (http://www.hwupgrade.it/forum/showthread.php?t=1649196)

2 regolamenti infranti al primo post, non male

ghemon_2002
14-09-2011, 12:41
scusate, non lo sapevo!!!

primo esercizio: uso 3 semafori: semaforo vuote = dim(dimensione buffer)
semaforo piene=0; semaforo mutex. Per individuare quando gli elementi del buffer sono dispari, come faccio? èsensato inserire una if(piene%2==1) oppure devo inserire una ulteriore variabile contatore delle posizioni piene?

DarkDrake88
14-09-2011, 18:23
scusate, non lo sapevo!!!

primo esercizio: uso 3 semafori: semaforo vuote = dim(dimensione buffer)
semaforo piene=0; semaforo mutex. Per individuare quando gli elementi del buffer sono dispari, come faccio? èsensato inserire una if(piene%2==1) oppure devo inserire una ulteriore variabile contatore delle posizioni piene?

Questo è molto personale, varia da programmatore a programmatore, devi vedere te la soluzione più consona al tuo modo di lavorare... c'è poco di insensato nel mondo della programmazione, ciò che ha senso per me potrebbe non averlo per te e viceversa

ghemon_2002
14-09-2011, 19:10
quello che vorrei sapere è se in quell'esercizio, per calcolare quando le posizioni piene sono dispari, è corretto usare una if con un semaforo dentro come condizione oppure è errato e va usata una nuova variabile contatore condivisa sia dal produttore che dal consumatore