Difference between revisions of "ProvaTeorica 2012.02.09"
Jump to navigation
Jump to search
Stefano 92 (talk | contribs) |
|||
Line 41: | Line 41: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
-stefano92 | -stefano92 | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang="C"> | ||
+ | |||
+ | |||
+ | |||
+ | monitor seq | ||
+ | { | ||
+ | int processi=0; | ||
+ | condition oktoexit; | ||
+ | |||
+ | procedure entry enter() | ||
+ | { | ||
+ | processi++ | ||
+ | } | ||
+ | |||
+ | procedure entry exit() | ||
+ | { | ||
+ | |||
+ | int inattesa=0 ; | ||
+ | processi-- ; | ||
+ | |||
+ | while(processi!=0) | ||
+ | { | ||
+ | inattesa++ ; | ||
+ | oktoexit.wait(); | ||
+ | inattesa=0; | ||
+ | } | ||
+ | |||
+ | oktoexit.signal(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | Save | ||
+ | |||
+ | |||
+ | </syntaxhighlight> |
Revision as of 15:53, 28 May 2014
Esercizio 1
/*
Esercizio 1: Il monitor seq da implementare deve fornire due procedure entry:
procedure entry void enter(void);
procedure entry void exit(void);
I processi chiamano i servizi di seq come segue:
….
seq.enter();
// codice controllato da seq
seq.exit();
….
Tutti i processi che ne facciano rischiesta possono entrare nel codice controllato da seq contemporaneamente (questa
NON e' una sezione critica!). Exit deve garantire che i processi escano dal codice controllato tutti insieme. Per
esempio se tre processi a,b e c chiamano seq.enter ogni processo non potra' completare la exit se prima tutti gli altri
due non hanno chiamato la exit. Se nel frattempo altri processi dovessero chiamare la seq.enter occorrera' attendere
anche questi ultimi.
*/
monitor seq
{
int processi=0;
condition oktoexit;
procedure entry enter()
{
processi++
}
procedure entry exit()
{
processi--
oktoexit.signal();
while(processi!=0)
{
oktoexit.wait();
}
}
}
-stefano92
monitor seq
{
int processi=0;
condition oktoexit;
procedure entry enter()
{
processi++
}
procedure entry exit()
{
int inattesa=0 ;
processi-- ;
while(processi!=0)
{
inattesa++ ;
oktoexit.wait();
inattesa=0;
}
oktoexit.signal();
}
}
Save