Difference between revisions of "ProvaPratica 2010.07.12"
Jump to navigation
Jump to search
Line 62: | Line 62: | ||
condition oktogo[10]; | condition oktogo[10]; | ||
int wait[10] = 0,0,0,0,0,0,0,0,0; | int wait[10] = 0,0,0,0,0,0,0,0,0; | ||
− | + | int running; | |
− | int running | ||
− | |||
priocoop.init(prio) { | priocoop.init(prio) { | ||
− | if(running | + | if(running != 0) { |
wait[prio]++; | wait[prio]++; | ||
− | |||
oktogo[prio].wait; | oktogo[prio].wait; | ||
− | |||
wait[prio]--; | wait[prio]--; | ||
} | } | ||
Line 79: | Line 75: | ||
priocoop.yield(prio) { | priocoop.yield(prio) { | ||
running--; | running--; | ||
− | + | for(int i = 0;i<10;i++) { | |
− | + | if(wait[i] != 0) { | |
− | + | oktogo[i].signal(); | |
− | + | wait[prio]++; | |
− | + | oktogo[prio].wait; | |
− | + | wait[prio]--; | |
− | + | break(); | |
− | |||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
Line 97: | Line 89: | ||
priocoop.fini() { | priocoop.fini() { | ||
running--; | running--; | ||
− | + | for(int i = 0;i<10;i++) { | |
− | + | if(wait[i] != 0) { | |
− | + | oktogo[i].signal(); | |
− | + | break(); | |
− | |||
− | |||
} | } | ||
} | } | ||
+ | |||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
-Midolo | -Midolo |
Revision as of 11:01, 1 April 2014
http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf
monitor priocoop{
condition run[9];
int waiting[9]=0,0,0,0,0,0,0,0,0;
int maxprio=0;
int occupato=0;
procedure entry init(prio){
if(occupato==1)
{
if(maxprio < prio)
{
maxprio=prio;
}
waiting[prio]++;
run[prio].wait();
waiting[prio]--;
}
occupato=1;
}
procedure entry yield(prio){
run[maxprio].signal();
if(maxprio < prio)
{
maxprio=prio;
}
waiting[prio]++;
run[prio].wait();
waiting[prio]--;
}
procedure entry fini(prio){
int i;
occupato=0;
waiting[prio]--;
if(waiting[maxprio] == 0)
{
maxprio=0;
for(i=prio;i>=0;i--)
{
if(waiting[i]!=0)
{
maxprio=0;
}
}
run[maxprio].signal();
}
}
Alessandro
//Processo con prioritá 0 = Processo con piú alta prioritá
//Processo con prioritá 9 = Processo con meno prioritá
monitor priocoop {
condition oktogo[10];
int wait[10] = 0,0,0,0,0,0,0,0,0;
int running;
priocoop.init(prio) {
if(running != 0) {
wait[prio]++;
oktogo[prio].wait;
wait[prio]--;
}
running++;
}
priocoop.yield(prio) {
running--;
for(int i = 0;i<10;i++) {
if(wait[i] != 0) {
oktogo[i].signal();
wait[prio]++;
oktogo[prio].wait;
wait[prio]--;
break();
}
}
running++;
}
priocoop.fini() {
running--;
for(int i = 0;i<10;i++) {
if(wait[i] != 0) {
oktogo[i].signal();
break();
}
}
}
}
-Midolo