|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2011
Messaggi: 3
|
sincronizzazione con semafori c++
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!!!!!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quali sono i problemi che riscontri nel risolvere gli esercizi?
Vietato chiedere la risoluzione completa di progetti o esercizi per corsi di studio CHIUSURA DEI THREAD SENZA LINGUAGGIO/APPLICATIVO FRA PARENTESI QUADRE 2 regolamenti infranti al primo post, non male |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Sep 2011
Messaggi: 3
|
ops !!!
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? |
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Jul 2010
Messaggi: 70
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Sep 2011
Messaggi: 3
|
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
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:06.




















