next up previous contents index return to home!
Next: Meccanismi di mutua esclusione Up: Generalità sui Thread Previous: Creazione dei Thread   Indice   Indice analitico

Esempio di creazione di due thread

In questo esempio vedremo come creare due semplici thread. Tutto quello che faranno questi due thread sarà leggere e incrementare una variabile condivisa e quindi stamparla a video.

Dato che un thread altro non è che una funzione C che gira in maniera concorrente ad altre funzioni (nell'esempio i due thread sono le due funzioni somma1 e somma2), allora si applicano le regole di scope del C standard. Sono quindi condivise fra tutti i thread quelle variabili che sono globali a tutte le funzioni.

Nell'esempio i due thread denominati somma1 e somma2 accedono entrambi alla variabile condivisa shared.val incrementandola, entrano quindi in un ciclo pensato solo per far passare del tempo e quindi rileggono e stampano a video la variabile condivisa. Tale accesso non viene regolamentato da alcun meccanismo di gestione delle concorrenza, non si può avere quindi alcuna garanzia sul fatto che il valore che viene alla fine stampato a video sia effettivamente quello che la variabile aveva assunto dopo il suo incremento, poichè, nel frattempo, può essere stato schedulato l'altro thread che l'ha a sua volta modificato.

Oltre a dare un'esemplificazione di come possono essere creati dei thread l'esempio mostra come la concorrenza non regolamentata genera, anche in un caso semplice, problemi di consistenza dei dati, quando a questi si accede senza il supporto di appositi meccanismi

Esempio


next up previous contents index
Next: Meccanismi di mutua esclusione Up: Generalità sui Thread Previous: Creazione dei Thread   Indice   Indice analitico
Giuseppe Lipari 2002-10-27