Thread contro Thread
Il titolo è decisamente da cineteca a rievocare un famoso film del 1979. A differenza del film, qui non parliamo di nessuna causa legale, di nessun abbandono e non ci sono affidamenti di cui parlare. Parliamo di due modo diversi di realizzare lo stesso concetto: il Thread.
Il Thread è una parte atomica di esecuzione di una elaborazione. Un Processo, che rappresenta l'istanza in esecuzione di un programma e che comprende oltre al codice del programma stesso anche i dati che sta elaborando, può essere composto da più Thread che possono eseguire in modo autonomo e concorrente condividendo gli stessi dati e lavorando per ottenere lo scopo comune dell'intero processo. I moderni sistemi operativi sono ormai multi-task da parecchio tempo: questo significa che è possibile eseguire processi diversi in parallelo (poi, in realtà questo parallelismo può essere reale o virtuale a seconda dell'architettura hardware della macchina che esegue). Molti sistemi operativi, però, sono anche multi-threading: permettono ad un processo di dividersi in tante sottoparti autonome che lavorano in parallelo per raggiungere il risultato.
Attualmente sono presenti due filosofie diverse di concepire i Thread: la prima è quella di Microsoft con i Windows Thread, la seconda è quella nata dalla comunità *NIX con i POSIX Thread detti anche PThread.
Sul blog e sul forum di Intel sono presenti due articoli in cui si parla a favore di uno o dell'altro tipo di Thread.
L'articolo sul blog si esprime a favore dei Thread di Windows, affermando che questi sono più comodi da usare in quanto è presente un solo tipo di dato per Thread, Mutex e segnali e dunque si può usare una sola funzione per creare un blocco su un thread che deve terminare, un mutex che è bloccato o un evento che deve essere segnalato. Inoltre i segnali sono persistenti e permettono dunque di essere rilevati anche con controlli effettuati dopo che l'evento sia stato segnalato. Infine è presente la funzione WaitForMultipleObjects che permette di bloccare un Thread in attesa che terminino una serie di Thread, vengano sbloccati una serie di Mutex e arrivi un segnale per una serie di eventi, il tutto invocando una sola funzione. Tutto questo, secondo l'autore dell'articolo, porta ad una maggior eleganza di programmazione.
L'articolo presente sul forum, invece, considera soprattutto questi punti uno svantaggio dell'implementazione dei Win Thread, a favore dunque dell'uso dei PThread. L'uso di tipi di dati diversi per le tre entità migliora la gestione e rende più facile la lettura di codice altrui. Inoltre è più facile verificare il codice in quanto sono necessarie funzioni diverse per attendere la terminazione di un Thread, lo sblocco di un Mutex o la segnalazione di un evento, evitando dunque errori o confusione. Infine, i segnali persistenti possono essere un peso per il programmatore che deve ricordarsi di resettare lo stato del segnale quando sa che potrebbe servire per un blocco successivo, mentre i segnali POSIX vengono catturati dai Thread in ascolto oppure scartati, evitando di sbloccare Thread che invece dovrebbero bloccarsi in attesa della prossima segnalazione.
Personalmente ho usato entrambi i tipi di Thread e devo dire che mi trovo a condividere pienamente le argomentazioni a favore della versione POSIX. Il dover usare tre tipi di dato diverso non causa nessun problema in quanto i tre oggetti sono concettualmente diversi e dunque devono avere significato diverso anche all'interno del codice, avere funzioni diverse e non avere una funzione che permette di attendere un insieme misto di Thread, Mutex e segnali non appesantisce la programmazione ma, invece, rende più facile e veloce il debug e la lettura di codice altrui. Infine l'implementazione POSIX permette la portabilità del codice in quanto i PThread sono nati per gli ambienti *NIX e Mac OS, ma è stato creato un port per ambiente Windows che consiste in una DLL da linkare nel proprio progetto.
Urban
8 Marzo 2007 alle 19:03
Il progetto Mono è un'alternativa open source all'ambiente di sviluppo .NET della Microsoft. Il progetto, già maturo da parecchio tempo per quanto riguarda il linguaggio 

