<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/index.php?action=history&amp;feed=atom&amp;title=Prova_Teorica_2009.01.14</id>
	<title>Prova Teorica 2009.01.14 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/index.php?action=history&amp;feed=atom&amp;title=Prova_Teorica_2009.01.14"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Prova_Teorica_2009.01.14&amp;action=history"/>
	<updated>2026-04-08T08:01:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Prova_Teorica_2009.01.14&amp;diff=740&amp;oldid=prev</id>
		<title>Mrta: Created page with &quot;Esercizio 1: Scrivere un monitor che implementi un buffer limitato (SIZE elementi) dove i messaggi abbiano associata una priorita'. I processi produttori richiamano pbb.enqueu...&quot;</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Prova_Teorica_2009.01.14&amp;diff=740&amp;oldid=prev"/>
		<updated>2014-05-19T14:58:06Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Esercizio 1: Scrivere un monitor che implementi un buffer limitato (SIZE elementi) dove i messaggi abbiano associata una priorita&amp;#039;. I processi produttori richiamano pbb.enqueu...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Esercizio 1: Scrivere un monitor che implementi un buffer limitato (SIZE elementi) dove&lt;br /&gt;
i messaggi abbiano associata una priorita'. I processi produttori richiamano&lt;br /&gt;
pbb.enqueue(m,prio)&lt;br /&gt;
mentre i processi consumatori chiamano&lt;br /&gt;
m=pbb.dequeue()&lt;br /&gt;
I primi SIZE processi produttori pongono i loro elementi nel buffer senza bloccarsi, i successivi si fermano in attesa.&lt;br /&gt;
Il consumatore deve sempre prendere l'elemento a priorita' massima fra quelli nel buffer *e* fra quelli in attesa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
struct el {&lt;br /&gt;
  int prio;&lt;br /&gt;
  condition c;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct bufel {&lt;br /&gt;
  T payload;&lt;br /&gt;
  struct el prioc;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct bufel buf[SIZE+1];&lt;br /&gt;
int nbuf, nqueue;&lt;br /&gt;
condition oktoread;&lt;br /&gt;
&lt;br /&gt;
procedure entry void enqueue(T m, int prio) {&lt;br /&gt;
  if(nbuf&amp;gt;=SIZE) {&lt;br /&gt;
    el=new(struct el); el.prio=prio;&lt;br /&gt;
    nqueue++; q.enqueue(el); nqueue--;&lt;br /&gt;
    free(el);&lt;br /&gt;
  }&lt;br /&gt;
  buf[nbuf].prio=prio; buf[nbuf].payload=m;&lt;br /&gt;
  nbuf++;&lt;br /&gt;
  sort(buf, nbuf); //in ordine crescente&lt;br /&gt;
  oktoread.signal();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure entry dequeu(void) {&lt;br /&gt;
  if(nbuf+nqueue==0)&lt;br /&gt;
    oktoread.wait()&lt;br /&gt;
  if(nqueue&amp;gt;0) {&lt;br /&gt;
    el=q.dequeue();  //quello a prio max&lt;br /&gt;
    el.c.signal();&lt;br /&gt;
  }&lt;br /&gt;
  nbuf--;&lt;br /&gt;
  return nuf[nbuf].payload;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mrta</name></author>
	</entry>
</feed>