title: Sincronizzazione
text: # Sincronizzazione
  
  In informatica, la sincronizzazione è la problematica dell'ordinamento temporale di operazioni.
  
  Se tutte le operazioni sono eseguite in serie, il problema della sincronizzazione non sussiste. Tuttavia, spesso, per sfruttare meglio il sistema e quindi accelerare le elaborazioni, si ricorre al parallelismo, che consiste nell'iniziare più flussi di esecuzione contemporanei (vedi multithreading). Fintanto che le operazioni eseguite in parallelo usano parti distinte del sistema, non ci sono problemi, ma, quando due componenti hardware o software operano in parallelo sulla stessa parte del sistema, si può avere un conflitto.
  
  Il codice che può essere eseguito solo da un processo alla volta (perché contiene dati condivisi, accesso a risorse, ecc.) si chiama sezione critica.
  
  Alcuni conflitti si possono risolvere semplicemente garantendo la mutua esclusione, cioè serializzando gli accessi, nel senso che il primo che deve operare nella parte comune la blocca, vi opera, e infine la sblocca, e il secondo, quando la trova bloccata, si ferma in attesa che sia sbloccata. La mutua esclusione è il tipo più semplice di sincronizzazione ed è realizzabile mediante monitor, lock o semafori.
  
  Per evitare altri tipi di conflitti sono necessarie forme più complesse di sincronizzazione.
  
  