Forum Informatica Unict

LAUREA MAGISTRALE => Linguaggi di Programmazione, 9 CFU => Topic started by: alex180788 on 23-09-2014, 14:55:08



Title: [PICT] - Produttore consumatore
Post by: alex180788 on 23-09-2014, 14:55:08
Ciao a tutti, nell'esempio del produttore-consumatore in PICT come mai il consumer avvia il processo "consumer!channel" se utilizzando il costrutto def sappiamo già che la computazione è non terminante?

grazie in anticipo  :yoh


Title: Re:[PICT] - Produttore consumatore
Post by: alex180788 on 17-11-2014, 19:23:50
Considerando quanto ho studiato finora sembrerebbe un refuso delle dispense,  ma magari mi sbaglio io e non ho capito bene... help :-)|


Title: Re:[PICT] - Produttore consumatore
Post by: Franco Barbanera on 18-11-2014, 14:25:32
Considerando quanto ho studiato finora sembrerebbe un refuso delle dispense,  ma magari mi sbaglio io e non ho capito bene... help :-)|

Hai provato a far girare l'esempio sul compilatore PICT.
Compila e gira che e' un piacere.
Errore quindi non ce n'e'.

FB


Title: Re:[PICT] - Produttore consumatore
Post by: Franco Barbanera on 18-11-2014, 14:27:02
Ciao a tutti, nell'esempio del produttore-consumatore in PICT come mai il consumer avvia il processo "consumer!channel" se utilizzando il costrutto def sappiamo già che la computazione è non terminante?

Non capisco cosa c'entri il fatto di utilizzare il costrutto def con la non terminazione.

A questo punto ti invito a scrivere un post su come funziona il costrutto def.
cosi' vediamo se e dov'e' il problema di comprensione.

FB


Title: Re:[PICT] - Produttore consumatore
Post by: alex180788 on 18-11-2014, 16:02:45
Def mi permette di definire un processo in ascolto che si replica effettuando un fork () ogni volta che riceve un valore (ben tipato) sul canale definito tramite il costruttto def. In questo modo se ci sono più processi "client" che inviano valori su questo canale esiste sempre una "copia" del processo server che ascolta... in questo senso il processo è non terminante


Title: Re:[PICT] - Produttore consumatore
Post by: Franco Barbanera on 18-11-2014, 16:12:19
Def mi permette di definire un processo in ascolto che si replica effettuando un fork () ogni volta che riceve un valore (ben tipato) sul canale definito tramite il costruttto def. In questo modo se ci sono più processi "client" che inviano valori su questo canale esiste sempre una "copia" del processo server che ascolta... in questo senso il processo è non terminante

Si, pero' e' come se il processo def rimanga bloccato fino all'invio successivo.

Inoltre la "copia" viene creata e mandata in esecuzione dall'invio del valore sul canale.
Se nessuno invia niente, il processo def non fa nulla.

Un caro saluto
FB


Title: Re:[PICT] - Produttore consumatore
Post by: alex180788 on 18-11-2014, 18:29:31
ho ancora qualche dubbio.... quando abbiamo visto il funzionamento del def abbiamo usato questo esempio

def hailer [] = print!"hail!"

ed abbiamo detto che dopo questa dichiarazione:
1) il nome di canale "hailer" è noto a tutte le clausole seguenti
2) posso eseguire un numero indefinito di volte il seguente codice ed avrò sempre una copia del processo associato ad hailer che mi risponde

run hailer![]

vediamo se ho capito:
la differenza tra hailer e consumer (entrambi definiti con def) è che il "reale consumatore" è il sottoprocesso

channel?i = (print!i | consumer!channel)

che attende un valore i da "consumare" sul canale channel... questo sottoprocesso deve essere riavviato ogni volta inviando il valore channel nel canale consumer, quest'ultimo invece è sempre in ascolto in quanto definito con "def".

Quindi la definizione di consumer crea un processo non terminante in attesa di un nome di canale. Ogni volta che ne riceve uno avvia un processo in ascolto (questo invece termina una volta che riceve il valore atteso) che stampa il valore ricevuto e viene riavviato inviando LO STESSO nome di canale channel attraverso il canale consumer.

spero di non aver detto troppe castronerie  :pray


Title: Re:[PICT] - Produttore consumatore
Post by: Franco Barbanera on 20-11-2014, 09:25:29
Giusto.

FB