Cómo declarar un puntero para que funcione en C, para que el puntero sea volátil.C: declarar el puntero volátil a la función
static void volatile (* f_pointer)(void*);
static void (volatile * f_pointer)(void*);
static void (* volatile f_pointer)(void*);
¿Por qué pregunto esto? Leí en http://wiki.answers.com/Q/Volatile_example_code_sample_coding_of_volatile_pointer sobre indicadores volátiles.
A veces hay problemas con punteros volátiles y volátiles puntero a:
Ahora, resulta que los punteros a las variables volátiles son muy comunes. Ambas declaraciones declaran foo sea un puntero a un entero volátil:
volatile int * foo;
int volatile * foo;
punteros a las variables volátiles no volátiles son muy raros (creo que los he usado una vez), pero será mejor que vaya por delante y le dará la sintaxis:
int * volatile foo;
Por lo tanto, quiero obtener un puntero volátil para funcionar no es un puntero a la función "volátil".
Gracias
¿Por qué quiere un puntero volátil para una función? ¿Quién va a cambiar este puntero? ¿Sabes lo que significa 'volátil' _really_? –
@James McNellis, sí, quiero. Este puntero se cambia por el hilo 0 y es utilizado por los hilos 1..7 para iniciar una función.Hay una barrera entre, pero quiero que el compilador limpie este puntero a la memoria en el hilo 0 antes de entrar en una barrera. También quiero que los hilos 1..7 vuelvan a leer este puntero (hay un bucle de '{barrera, lectura de puntero, función de llamada}'). Utilizo un sistema con muchos registros disponibles, por lo que el compilador puede almacenar en caché muchas variables. ¿Estoy en lo cierto? – osgx
Si la barrera está escrita correctamente, el compilador no debe almacenar valores en caché: el 'volátil' no debería ser necesario. – caf