Come dichiarare un puntatore a funzionare in C, in modo che il puntatore stesso sia volatile.C: Dichiara il puntatore volatile alla funzione
static void volatile (* f_pointer)(void*);
static void (volatile * f_pointer)(void*);
static void (* volatile f_pointer)(void*);
Perché chiedo questo? Ho letto su http://wiki.answers.com/Q/Volatile_example_code_sample_coding_of_volatile_pointer su puntatori volatili.
a volte ci sono problemi con i puntatori volatili e puntatore a volatile:
Ora, si scopre che i puntatori ai variabili volatili sono molto comuni. Entrambe queste dichiarazioni dichiarano foo ad essere un puntatore a un intero volatile:
volatile int * foo;
int volatile * foo;
puntatori volatile per variabili non volatili sono molto rare (penso che li ho usato una volta), ma meglio che vada avanti e che vi dia la sintassi:
int * volatile foo;
Quindi, voglio ottenere un puntatore volatile per funzionare non un a funzione "volatile" puntatore.
Grazie
Perché si desidera un puntatore volatile a una funzione? Chi cambierà questo puntatore? Sai cosa significa "volatile" _really_? –
@James McNellis, Sì, lo voglio. Questo puntatore viene modificato dal thread 0 e utilizzato dai thread 1..7 per avviare una funzione.C'è una barriera tra, ma voglio che il compilatore scarichi questo puntatore sulla memoria nella thread 0 prima di entrare in una barriera. Inoltre voglio che i thread 1..7 rileggano questo puntatore (c'è un ciclo di '{barrier, pointer read, calling function}'). Uso un sistema con molti registri disponibili, quindi il compilatore può memorizzare molte variabili. Ho ragione? – osgx
Se la barriera è scritta correttamente, il compilatore non deve memorizzare valori di cache su di esso - il 'volatile 'non dovrebbe essere necessario. – caf