Prove scritte 2020

From Sistemi Operativi
Jump to navigation Jump to search

Prova 2020/01/15

esercizio c1

Soluzione proposta 1

Soluzione proposta 2

int value;
boolean ret_val;
int time;
min_heap<int, condition> heap;  // ordinato sul tempo minore.
vector<condition> queue; // vector utilizzato come queue, con rimozione anche nel mezzo.


monitor {
	value = 0;
	time = 0;
}

void V(void) {
	if (heap.size() > 0) {
		condition c = queue.pop_back(); // remove and return
		heap.remove(c);  // rimuovi l'unico elemento con c.
		ret_val = true;
		c.signal();
	} else {
		value++;
	}
}


boolean P(unsigned int timeout) {	
	if (value > 0) {
		value--;
		return true;
	} else {
		int next_time = timeout + time;
		condition c = new condition();
		heap.insert(<next_time, c>);
		queue.push_back(c);
		c.wait();
		free(c);
		
		return ret_val;	
	}	
}


void tick(void) {
	ret_val = false;
	time++;
	while (heap.size() > 0 && heap.top().0 <= time) {
		condition c = heap.top().1;
		heap.deleteTop();
		queue.remove(c);
		c.signal();
	}
}

esercizio c2