Ecco alcuni retroscena:
Ho bisogno di una variabile contatore condivisa tra le routine di go, utilizzate per qualcosa come un leaky-bucket. So che c'è un esempio di leaky-bucket in Effective Go, sezione concomitante, ma il numero che devo seguire può essere molto grande, e ritengo sia inefficiente usare il numero di elementi in un canale per tracciarlo. Quindi sto considerando di utilizzare una variabile condivisa tra routine diverse per tracciare il numero.Gli operatori di incremento in Go atomic su x86?
Capisco che senza una configurazione esplicita, tutte le routine di go sono mappate su un thread. Ma se assegno più di un thread al programma su un computer multi-core, gli operatori di incremento sono atomici? È lo stesso per diversi tipi di dati (int32
, float32
, ecc.) Su macchine diverse (x86_32
, x86_64
, arm
)?
Per essere più concreti, cosa succede se ho in una routine e counter -= 512
in un'altra routine e le due routine si verificano in esecuzione in due thread? Devo preoccuparmi della sicurezza dei thread? Devo mettere i lucchetti sulla counter
?
Wow. Grazie! Non ho notato che c'è 'sync/atomic'. Questo rende le cose molto più facili! –