Difference between revisions of "Prova teorica 2014.07.16"
Jump to navigation
Jump to search
(Created page with "Testo: [http://www.cs.unibo.it/~renzo/so/compiti/2014.07.16.tot.pdf] == Esercizio c.1 == <syntaxhighlight lang="C"> /* * Esercizio c.1: scrivere il monitor mMbb che realizz...") |
m (→Esercizio c.1) |
||
Line 51: | Line 51: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[User:S.G|S.G]] ([[User talk:S.G|talk]]) 17:21, 2 December 2016 (CET) | [[User:S.G|S.G]] ([[User talk:S.G|talk]]) 17:21, 2 December 2016 (CET) | ||
+ | |||
+ | Non è fifo. Perché? [[User:Renzo|Renzo]] ([[User talk:Renzo|talk]]) 07:43, 3 December 2016 (CET) |
Revision as of 07:43, 3 December 2016
Testo: [1]
Esercizio c.1
/*
* Esercizio c.1: scrivere il monitor mMbb che realizzi un meccanismo di un minmax bounded buffer.
* Dopo le prime MIN operazioni di scrittura, un minmax bounded buffer deve sempre avere almeno MIN elementi e mai piu' di MAX
* elementi (e' quindi limitato sia nell'ampiezza massima, sia nell'ampiezza minima).
* Le funzioni (procedure entry) read e write del minmax bounded buffer hanno gli stessi argomenti e valori di ritorno di quelle del
* producer/consumer o del bounded buffer ordinario.
*/
#define MIN
#define MAX
#define SIZE // con SIZE >= MAX
monitor mMbb{
generic_type bb[];
int front, rear, count;
condition R, W;
void mMbb(void){
bb = new generic_type[SIZE];
front = rear = count = 0;
}
procedure_entry generic_type read(){
while(count < MIN) // Controllo che il buffer abbia MIN elementi per poter leggere
R.wait();
generic_type ret = bb[rear];
count--;
rear = (rear + 1) % SIZE;
W.signal();
return ret;
}
procedure_entry write(generic_type c){
while(count >= MAX) // Controllo che il buffer non abbia MAX elementi per poter scrivere
W.wait();
bb[front] = c;
count++;
front = (front + 1) % SIZE;
R.signal();
}
}
S.G (talk) 17:21, 2 December 2016 (CET)
Non è fifo. Perché? Renzo (talk) 07:43, 3 December 2016 (CET)