Hola a todos.
He estado leyendo acerca de para que sirve este keyword (volatile). Lo que he entendido es que sirve para que el compilador no haga ciertas optimizaciones de tipo "ignorar variables que no van a cambiar". Por ej. si tenemos:
Lo que he entendido es que el compilador detecta que con 'aux' ya no se hace nada más y deja de hacer comparaciones con aux, o bien se da cuenta de que va ha hacer muchas comparaciones y lo mete en un registro de la CPU.
De tal manera que si tenemos el bucle anterior ejecutado por un hilo A en background y otro hilo B pone 'aux' a cierto, el hilo A no "se entera" porque el compilador ha optimizado código para que deje de hacer comparaciones. (O si lo hace otro proceso, hardware ... )
Esta situación es la que soluciona el modificador "volatile".
Sin embargo lo he probado y ese problema anteriormente mencionado no ocurre, entonces ¿para qué sirve "volatile"?
Esta es la prueba que he hecho:
Gracias y saludos.
He estado leyendo acerca de para que sirve este keyword (volatile). Lo que he entendido es que sirve para que el compilador no haga ciertas optimizaciones de tipo "ignorar variables que no van a cambiar". Por ej. si tenemos:
Código [Seleccionar]
bool aux=false;
while(!aux){
//Hacer cosas sin usar aux.
}
Lo que he entendido es que el compilador detecta que con 'aux' ya no se hace nada más y deja de hacer comparaciones con aux, o bien se da cuenta de que va ha hacer muchas comparaciones y lo mete en un registro de la CPU.
De tal manera que si tenemos el bucle anterior ejecutado por un hilo A en background y otro hilo B pone 'aux' a cierto, el hilo A no "se entera" porque el compilador ha optimizado código para que deje de hacer comparaciones. (O si lo hace otro proceso, hardware ... )
Esta situación es la que soluciona el modificador "volatile".
Sin embargo lo he probado y ese problema anteriormente mencionado no ocurre, entonces ¿para qué sirve "volatile"?
Esta es la prueba que he hecho:
Código [Seleccionar]
#include <thread>
#include <mutex>
#include <iostream>
using namespace std;
bool shouldStop;
void pr1();
int main(){
thread th(pr1);
th.detach();
this_thread::sleep_for(chrono::milliseconds(3000));
shouldStop = true;
char *c;
cin >> c;
return 0;
}
void pr1(){
int i = 0;
while (!shouldStop){
cout<<"HOLA "<<i<<endl;
i++;
this_thread::sleep_for(chrono::milliseconds(1000));
}
}
Gracias y saludos.