Difference between revisions of "ProvaPratica 2010.07.12"
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
| Line 100: | Line 100: | ||
| </syntaxhighlight> | </syntaxhighlight> | ||
| -Midolo | -Midolo | ||
| + | |||
| + | |||
| + | |||
| + | <syntaxhighlight lang="C"> | ||
| + | //0: priorita' maggiore | ||
| + | //9: priorita' minore | ||
| + | cond oktoenter[10]; | ||
| + | int count[10]; | ||
| + | bool running = false; | ||
| + | |||
| + | //restituisce la priorita' maggiore che ha un processo in attesa | ||
| + | getprio() { | ||
| + |       	for(i=0;i<10;i++) { | ||
| + | 		 if(count[i]>0) | ||
| + | 			 break; | ||
| + | 	 } | ||
| + | 	 return i; | ||
| + | } | ||
| + | |||
| + | priocoop() { | ||
| + | 	init (prio) { | ||
| + | 		if (running) { | ||
| + | 			count[prio]++; | ||
| + | 			oktoenter[prio].wait(); | ||
| + | 			count[prio]--; | ||
| + | 		} | ||
| + | 		running = true; | ||
| + | 	} | ||
| + | 	yield(prio) { | ||
| + | 		i=getprio(); | ||
| + | 		if (i < 10) { | ||
| + | 			// running = false;  | ||
| + | 			oktoenter[i].signal(); | ||
| + | 			count(prio)++ | ||
| + | 			oktoenter[proc].wait(); | ||
| + | 	                // running = true; | ||
| + |         	        count[prio]--; | ||
| + | 		} | ||
| + | 	} | ||
| + | 	fini(prio){ | ||
| + | 		i=getprio(); | ||
| + | 		running=false; | ||
| + | 		if(i<10) | ||
| + | 			oktoenter[i].signal; | ||
| + | 	} | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | -Berna3.14 | ||
Revision as of 12:34, 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
//0: priorita' maggiore
//9: priorita' minore
cond oktoenter[10];
int count[10];
bool running = false;
//restituisce la priorita' maggiore che ha un processo in attesa
getprio() {
      	for(i=0;i<10;i++) {
		 if(count[i]>0)
			 break;
	 }
	 return i;
}
priocoop() {
	init (prio) {
		if (running) {
			count[prio]++;
			oktoenter[prio].wait();
			count[prio]--;
		}
		running = true;
	}
	yield(prio) {
		i=getprio();
		if (i < 10) {
			// running = false; 
			oktoenter[i].signal();
			count(prio)++
			oktoenter[proc].wait();
	                // running = true;
        	        count[prio]--;
		}
	}
	fini(prio){
		i=getprio();
		running=false;
		if(i<10)
			oktoenter[i].signal;
	}
}
-Berna3.14