Capisco in un sistema single core, più thread operano in sequenza, programmati dal sistema operativo. Quindi non è possibile avere una condizione di gara poiché per definizione stanno alternando a turno una variabile.
Tuttavia, se ho un processore multicore, è possibile che vengano eseguiti contemporaneamente più thread dello stesso processo e quindi entrambi tentano di bloccare una variabile nello stesso momento?
Ad esempio, ho un semaforo globale s = 1
Se 2 thread su core differenti funzionassero contemporaneamente, entrambi tenterebbero di decrementare il semaforo e avere successo in condizioni di gara.
In un singolo core, 2 thread operano in sequenza (pianificato dal sistema operativo), quindi non è possibile, poiché il secondo thread vedrà s = 0 dal momento in cui è pianificato.
Quindi mi chiedo se ho un processo che genera più thread, e ho più core, ciò che sta fermando la condizione di competizione in cui 2 thread in esecuzione contemporaneamente vedono il semaforo globale come s = 1 allo stesso tempo e tentano di operare su di esso?