I concetti di
operazione sincrona e asincrona sono piuttosto complesso da capire e a volte succede che i programmatori facciano confusione, interpretando male le definizioni e, quindi, gestendo in modo errato i processi della propria applicazione. Questo è dovuto anche al fatto che in molti libri di testo le descrizioni sul funzionamento delle operazioni non sono dettagliate ed esatte, e risulta difficile coglierne le sottili sfumature.
Ad esempio, non è corretto affermare che in un
contesto sincrono, due o più operazioni che esistono all'interno dello stesso thread si debbano bloccare a vicenda, così come non è giusto affermare che in un
contesto asincrono, due o più operazioni possono tranquillamente essere trattate in modo concorrente, nello stesso lasso di tempo, se presenti in thread diversi, senza che l'una ostacoli o blocchi l'altra.
In realtà, quando si lavora in modalità
sincrona, si può avere un set di operazioni che accedono a una risorsa, la quale a sua volta può gestire più operazioni contemporaneamente; in questo scenario, le operazioni possono essere eseguite in modo sequenziale, una alla volta, quindi nello stesso thread, oppure raggruppate in insiemi a seconda del numero di operazioni che è in grado di accogliere una risorsa.
In quest'ultimo caso, le operazioni vengono eseguite simultaneamente, quando appartenenti al gruppo che ottiene il permesso di accedere alla risorsa in questione. In una situazione del genere, è sbagliato dire che le operazioni possono bloccarsi a vicenda perché appartengono allo stesso thread, in quanto lo stadio di stallo è determinato unicamente dal fatto che vi è una contesa per l'accesso a una risorsa. La soluzione a questa eventualità è rappresentata dall'adozione di un
codice di sincronismo, che arbitri le contese tra i processi in gioco.
Un
algoritmo di sincronizzazione serve a progettare un sistema capace di evitare la contesa delle risorse assicurandosi che ad accedervi sia un thread alla volta, costringendo gli altri a uno stato di attesa sino al rilascio delle risorse impegnate. La sincronia dei processi, quindi, non deve essere intesa come una soluzione che permette di avere più processi attivi allo stesso tempo, ma come un metodo per arbitrarli.