Diciamo che ho un puntatore a un numero intero.Il puntatore dereferenziazione è atomico?
volatile int* commonPointer = new int();
E ho più thread che il riferimento a tale puntatore.
int blah = *commonPointer;
Ma, un thread ha bisogno di cambiare indirizzo del puntatore:
int* temp = new int();
int* old = commonPointer;
InterlockedExchange(&commonPointer,temp);
delete old;
Ora, consente di ignorare il fatto che alcuni thread possono essere la lettura del valore "vecchio", e alcuni possono essere la lettura del " nuovo "valore, non è un problema nel mio caso.
Può esserci uno scenario in cui un thread inizia a dereferenziare il puntatore, proprio come l'indirizzo viene eliminato, e quindi ottiene un'eccezione?
Oppure il dereferenziamento è abbastanza atomico da non riuscire?
"atomico * sufficiente *"? Non è garantito che la lettura di un intero a 32 bit sia atomica secondo lo standard definito dalla piattaforma. In pratica di solito lo sarà, ma puoi sempre controllarlo tu stesso. –
Qual è l'architettura del sistema operativo e della CPU? –
@ Eds. La lettura di un intero a 32 bit è atomica. Ma il dereferenziamento del puntatore ... non ne sono così sicuro. È più di una lettura ... legge l'indirizzo a 32 bit (o 64 in x64) del puntatore e quindi deve fare un'altra lettura da quell'indirizzo. –