L’esecuzione contemporanea di più programmi in un sistema operativo pone il problema di gestire in modo corretto il possibile accesso concorrente alle stesse risorse. In generale più processi sono in competizione fra loro per l’accesso alle risorse, e un sistema operativo deve garantire a tutti l’accesso senza creare condizioni di blocco o di utilizzo sovrapposto. La problematica che si pone è dunque quella di una corretta sincronizzazione fra i processi. Processi diversi potrebbero anche voler comunicare fra loro, scambiandosi dati o richieste di servizio secondo una logica produttore-consumatore. In questo caso si parla di cooperazione fra processi. La programmazione concorrente si occupa di risolvere tutte le problematiche qui accennate, e si basa sull’utilizzo di tecniche comuni a sistemi operativi diversi, ad esempio i semafori per la sincronizzazione, lo scambio di messaggi oppure la memoria condivisa per la comunicazione. I sistemi operativi multiprocessing offrono al programmatore funzioni API per la programmazione concorrente, consentendo di creare nuovi processi o thread, di sincronizzare l’accesso alle risorse tramite eventi, mutex, semafori, sezioni critiche, timer di attesa, variabili condizione, oppure di comunicare attraverso messaggi, pipe, file mapping. Anche il linguaggio di programmazione Java si occupa in modo speciale della concorrenza fra diversi possibili thread di un processo, offrendo soluzioni per la condivisione di risorse e per la sincronizzazione fra i thread.
Sommario
1. COOPERAZIONE E SINCRONIZZAZIONE - 1.1. Blocco critico • 2. CONCORRENZA E SINCRONIZZAZIONE IN WINDOWS - 2.1. Processi e thread - 2.2. Sincronizzazione • 3. CONCORRENZA E SINCRONIZZAZIONE IN LINUX - 3.1. Processi e thread - 3.2. Sincronizzazione • 4. CONCORRENZA E SINCRONIZZAZIONE NEL LINGUAGGIO JAVA - 4.1. I thread in Java - 4.2. Condivisione di risorse fra i thread - 4.3. Sincronizzazione dei thread.
Tratto dal Cap. 26 del Manuale Cremonese di Informatica, Zanichelli, 2016
Sommario
1. COOPERAZIONE E SINCRONIZZAZIONE - 1.1. Blocco critico • 2. CONCORRENZA E SINCRONIZZAZIONE IN WINDOWS - 2.1. Processi e thread - 2.2. Sincronizzazione • 3. CONCORRENZA E SINCRONIZZAZIONE IN LINUX - 3.1. Processi e thread - 3.2. Sincronizzazione • 4. CONCORRENZA E SINCRONIZZAZIONE NEL LINGUAGGIO JAVA - 4.1. I thread in Java - 4.2. Condivisione di risorse fra i thread - 4.3. Sincronizzazione dei thread.
Tratto dal Cap. 26 del Manuale Cremonese di Informatica, Zanichelli, 2016