Referencia del lenguaje C#
volatile (Referencia de C#)

La palabra clave volatile indica que varios subprocesos que se ejecutan a la vez pueden modificar un campo. Los campos que se declaran como volatile no están sujetos a optimizaciones del compilador que suponen el acceso por un subproceso único. Esto garantiza que el valor más actualizado está en todo momento presente en el campo.

El modificador volatile suele utilizarse para un campo al que tengan acceso varios subprocesos sin utilizar la instrucción lock (Instrucción, Referencia de C#) para serializar el acceso. Vea Cómo: Crear y terminar subprocesos (Guía de programación de C#) para obtener un ejemplo de volatile en un escenario de multiproceso.

La palabra clave volatile se puede aplicar a los campos de estos tipos:

  • Tipos de referencia.

  • Tipos de puntero (en un contexto no seguro). Tenga en cuenta que aunque el propio puntero puede ser volátil, no ocurre lo mismo con el objeto al que apunta. Es decir, no puede declarar un "puntero como volátil".

  • Tipos enteros como sbyte, byte, short, ushort, int, uint, char, float y bool.

  • Tipos de enumeración con un tipo base entero.

  • Parámetros de tipo genéricos que se sabe que son tipos de referencia.

  • IntPtr y UIntPtr.

La palabra clave volatile sólo se puede aplicar a los campos de una clase o estructura. Las variables locales no se pueden declarar como volatile.

Ejemplo

El ejemplo siguiente muestra cómo declarar una variable de campo pública como volatile.

// csharp_volatile.cs
// compile with: /target:library
class Test
{
   public volatile int i;

   Test(int _i)
   {
      i = _i;
   }
}
Especificación del lenguaje C#

Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.

  • 3.10 Orden de ejecución

  • 10.4.3 Campos volátiles

Vea también

Referencia

Palabras clave de C#
Modificadores (Referencia de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#

Etiquetas :


Community Content

Juan Carlos Ruiz [BogotaDotNet.org]
C# – la palabra clave volatile, explicación y ejemplos

La palabra clave volatile es una de esas palabras clave muy pocas veces comprendidas, la documentación presente en msdn permite concluir que hay que utilizarla siempre que se manejen hilos, pero esto no siempre es así. Sin embargo lograr identificar que es lo que hace realmente esta palabra clave es una labor complicada así que dedicaré este artículo a explorar esta funcionalidad y a crear un ejemplo práctico que permita entender su verdadera naturaleza.

En msdn encontramos la siguiente definición de la palabra clave volatile:


La palabra clave volatile indica que varios subprocesos que se ejecutan a la vez pueden modificar un campo. Los campos que se declaran como volatile no están sujetos a optimizaciones del compilador que suponen el acceso por un subproceso único. Esto garantiza que el valor más actualizado está en todo momento presente en el campo

Debemos resaltar dos aspectos importantes de ese texto:

  1. Se menciona que los campos volatile no son susceptibles de optimizaciones por parte del compilador. Cuales optimizaciones?
  2. Dice que esto garantiza que el valor más actualizado siempre esta presente en el campo. No se supone que esto es así siempre?

En este artículo se revisan estas dos preguntas y por medio de ellas se deducen un conjunto de ejemplos reales y comprobables de la funcionalidad de volatile.

Optimizaciones del compilador

Siempre que compilamos un programa hecho con C# el compilador se encarga de convertir ese código C# en código de lenguaje IL, bueno realmente en OpCodes de IL. Esto es así de sencillo, pero resulta que cuando compilamos nuestro código en la configuración release o más específicamente cuando se marca la casilla de Optimizar código en el proyecto el compilador realiza una revisión general del código par determinar que cosas puede hacer funcionar de una manera mejor a la que codificó el programador inicialmente o incluso como puede cambiar las cosas en el ejecutable que no están en manos del programador ni del propio lenguaje para que a la hora de ejecutarse el programa sea más eficiente.

Articulo completo:

http://juank.black-byte.com/c-explicacion-ejemplo-volatile/


Page view tracker