Il concetto di memoria condivisa (shared memory) è una astrazione utile per separare la gestione del flusso di un programma parallelo dai problemi del mapping dei dati, della comunicazione e della sincronizzazione tra i processi.
Una variabile può essere condivisa tra più processi concorrenti che la usano assegnando ad essa un valore o leggendo il suo valore come nel caso dei programmi sequenziali.
Il problema che occorre risolvere è quello della sincronizzazione degli accessi ad una variabile condivisa da parte di più processi.
Si usano per calcolatori con pochi nodi (qualche decina).