MS Link:El inicio de sesión del hipervínculo es visible.
La palabra clave volátil indica que un campo puede modificarse por múltiples hilos ejecutándose simultáneamente. Los campos declarados como volátiles no están restringidos por la optimización del compilador (suponiendo que se acceda a ellos mediante un solo hilo). Esto garantiza que el campo se renderice con el valor más reciente en todo momento.
El modificador volátil se utiliza típicamente para campos a los que acceden múltiples hilos pero que no serializan el acceso mediante una sentencia de bloqueo.
Las palabras clave volátiles pueden aplicarse a los siguientes tipos de campos:
- Tipo de cita.
- Tipo de puntero (en un contexto inseguro). Cabe señalar que, aunque el puntero en sí puede ser mutable, el objeto al que apunta no puede ser mutable. En otras palabras, no se puede declarar "puntero a un objeto mutable".
- Tipos como sbyte, byte, short, ushort, int, uint, char, float y bool.
- Un tipo de enum con uno de los siguientes tipos base: byte, sbyte, short, ushort, int o uint.
- Parámetros genéricos de tipo que se sabe que son tipos de referencia.
- IntPtr y UIntPtr.
Las palabras clave variables solo pueden aplicarse a campos de una clase o estructura.Las variables locales no pueden declararse como volátiles。
No más tonterías, escribe un bucle para probarlo:
Vamos a probarlo 10.000 veces seguidas,se encontró que la salida de valores a es correcta, pero,No lo explicaVolátil es seguro para roscasPorque, si lo pruebas muchas veces, verás que habrá errores de cálculo. Porque existe la posibilidad de un resultado correcto y otra de un resultado incorrecto
Código:
Probemos 100.000 bucles de nuevo, y podemos ver que el valor de a es incorrecto, porque cuanto menor es el número de bucles, menor es la probabilidad de error, y el error no es tan evidente, igual que no hubo error después de 10.000 bucles hace un momento.
En este momento, añadimos un bloqueo para probar, y se puede ver que el valor de a se calcula correctamente como esperábamos.
Código:
Resumen: volátil no garantiza la seguridad del hilo, como puedes ver en el ejemplo anterior.
|