====== Eccezioni e Parallelismo ====== Nella lezione del 10/10, abbiamo trattato due concetti relativi alla gestione del flusso di controllo di un programma. Le [[wp>Exception_handling|eccezioni]] sono un meccanismo di controllo del flusso che generalizza le condizioni di errore, permettendo l'uscita dal flusso di controllo base per passare ad un blocco di gestione dell'errore, in modo analogo a quanto accade per la gestione degli interrupt a livello di sistema. Si notino le [[wp>Exception_handling_syntax|differenze sintattiche]] nella gestione delle eccezioni in C++ e Java. Per quanto riguarda il parallelismo, abbiamo distinto tre metodi di gestione: * [[wp>Coroutine]], usate per l'esecuzione parallela cooperativa attraverso il supporto da parte del linguaggio di programmazione (generalmente attraverso una keyword ''yield''); sono funzioni caratterizzate dall'avere punti di accesso e ritorno multipli. * [[wp>Process_(computing)|Processi]] (visti in parte in Informatica 2, verranno trattati in maggior dettaglio in [[teaching:labsw|Laboratorio Software]] nella Laurea Specialistica). * [[wp>Thread_(computer_science)|Thread]] In particolare, abbiamo visto che i thread in Java sono supportati attraverso una libreria, data dalla classe ''Thread'', con i metodi ''run'', ''start'', ''join'', e ''stop''. Per permettere la gestione dell'accesso ai dati condivisi in mutua esclusione (ovvero da parte di un solo thread alla volta), si usa un meccanismo noto come [[wp>Monitor_(synchronization)|monitor]], realizzato in Java in forma passiva (ovvero il monitor non è a sua volta un thread), attraverso i metodi [[wp>Java_keyword|synchronized]], che, quando invocati, assegnano il diritto di accesso all'oggetto al solo thread che ha eseguito l'invocazione. Abbiamo poi visto che in [[wp>Ada_(programming_language)|Ada]], invece, l'implementazione dei monitor è attiva, ovvero il monitor è un thread (o //task// in Ada) che offre servizi di accesso ai suoi dati privati. Per la sintassi del linguaggio, si veda l'[[http://en.wikibooks.org/wiki/Ada_Programming|Ada Programming Wikibook]], e in particolare il capitolo sui [[http://en.wikibooks.org/wiki/Ada_Programming/Tasking|task]].