Casi di studio


In "Struttura del progetto" abbiamo accennato all' impiego dei threads quando possibile. Già da questa espressione si intuisce che i threads non sono lo strumento più indicato per gestire la concorrenza in UNIX.

Va premesso che SOLARIS consente l' utilizzo di due tipologie di thread: SOLARIS_threads e POSIX_threads. I primi sono chiaramente una implementazione proprietaria dei threads su System V SOLARIS, mentre i threads POSIX sono un' implementazione basata sullo standard POSIX.

Avendo la possibilità di lavorare con LINUX ho utilizzato chiaramente i threads POSIX, i quali hanno dimostrato un  compotramento veramente bizzarro tanto che ne sconsiglio caldamente il loro impiego in UNIX . Tutto sommato non ci si dovrebbe stupire più di tanto, visto che UNIX non li supporta e come kernel monolitico mal si presta a realizzare delle funzionalità che non gli appartengono. Questa a mio avviso è anche la ragione per la quale  gli obiettivi di POSIX in merito alla definizione di una standard siano piuttosto velleitari: a rigore uno standard dovrebbe garantire non solo primitive universalmente riconosciute, ma anche medesimi comportamenti nella loro esecuzione. Ciò mi sembra un problema difficilmente risolvibile in quanto comporta l' esigenza di poter agire sul comportamento del Kernel con funzionalità che ne sono esterne.

Comunque per motivare le mie ragioni porto ad esempio una prova di threads  nella quale si verifica la primitiva di creazione pthread_create(),  ed il  comportamento dei threads nei confronti dei segnali.


La select  è una primitiva fondamentale in System V in quanto non disponendo della funzionalità di asincronismo è l' unico strumento assieme alla funzionalità di non blocking per realizzare servers paralleli. Trascurando le sockets non bloccanti, delle quali non mi sono occupato, un progetto di rete che intende realizzare un server multiservizio non può esimersi dall' impiego della select, a tal punto che di fatto questa applicazione si può dire basata su tale primitiva.

Anche la select non è stata avara di sorprese, con l' aggravante di non aver trovato alcuna documentazione che metta in guardia il programmatore dal suo impiego  con i segnali. A tal proposito porto ad esempio la seguente prova di select, che evidenzia il funzionamento della primitiva quando è eseguita da un processo che è predisposto a gestire segnali in modo non abortivo.