-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 

Assegnazione palline in un tennis club di Michele Beltrame

Versione stampabile.

1. Introduzione 2. Codice Sorgente (parte 1) 3. Discussione (parte 1) 4. Codice sorgente (parte 2: subroutine) 5. Discussione sulle subroutine 6. Estensioni 

Discussione (parte 1)

Il programma, dopo aver incluso i moduli threads e threads::shared (quest'ultimo è necessario per poter condividere variabili tra un thread e l'altro), definisce alcune variabili iniziali: numero di palline appartenenti al club; nomi dei giocatori (per rendere possibile una immediata distinzione visiva di ciasun thread); tempo massimo a disposizione di ogni giocatore per completare una partita; tempo di attesa nel caso in cui il club rifiuti di concedere le palline al giocatore; tempo di attesa tra la restituzione delle palline ed una nuova richiesta di altre; numero massimo di palline che un singolo giocatore può richiedere in una volta. Notate inoltre, in questa sezione, che $palline viene definita come shared, ed assume un valore iniziale uguale a quello di $pallinetot: questa variabile rappresenta infatti il numero di palline che il club ha in un determinato istante, ed è condivisa tra tutti i thread/giocatori.

A questo punto vengono creati i thread corrispondenti ai vari giocatori, ed i loro handle vengono memorizzati nell'array @g. La creazione di un thread avviene passando al costruttore la reference alla funzione che costituirà il blocco di codice principale del thread, ed un parametro per essa, cioè il nome del giocatore. Una volta creati i thread, essi iniziano subito la loro esecuzione, ed è necessario effettuare un join() di tutti essi. Ciò avviene nel ciclo sottostante. Una volta che tutti i thread sono stati uniti al programma principale, esso attende la loro fine prima di chiudere (il che, come vedremo dopo, significa in questo caso che il programma gira in eterno). Se non avessimo chiamato join() per ogni thread, o al suo posto avessimo chiamato detach(), il programma sarebbe terminato quasi subito con l'errore:

 A thread exited while 26 other threads were still running.

Questo indica che tutti i thread dipendenti da quello principale non hanno potuto terminare la loro esecuzione, in quanto il thread principale è uscito.

‹‹ Codice Sorgente (parte 1)

Codice sorgente (parte 2: subroutine) ››

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google