Vantaggi della programmazione concorrente

Su un sistema uniprocessore, programmare un'applicazione con un insieme di processi/thread concorrenti può avere diversi vantaggi:

Inoltre, se il processore è multithreading, oppure il sistema è multiprocessore, i vantaggi in termini di efficienza sono ancora più significativi.

La programmazione concorrente presenta però alcune importanti problematiche, legate all'interazione tra processi/thread diversi.

Memoria condivisa

Nella discussione che segue, si suppone che più processi abbiano una zona di memoria condivisa. Di norma, i processi hanno memoria separata, ma

Esempio

Un esempio di memoria condivisa potrebbe essere un sistema banale di prenotazioni aeree, che usa $n$ terminali connessi a un computer centrale. Questo sistema assegna i posti in ordine sequenziale finchè non sono esauriti.

Si ha un processo per ciascuno degli $n$ terminali, e tutti i processi condividono due variabili:

Il programma che gli $n$ terminali eseguono per prenotare un posto sul volo è: