Volatile Clase

Definición

Contiene los métodos para realizar operaciones de memoria volátil.

public ref class Volatile abstract sealed
public static class Volatile
type Volatile = class
Public Class Volatile
Herencia
Volatile

Comentarios

En un sistema multiprocesador, debido a las optimizaciones de rendimiento en el compilador o procesador, es posible que parezca que las operaciones de memoria normales se reordenan cuando varios procesadores funcionan en la misma memoria. Las operaciones de memoria volátil impiden determinados tipos de reordenación con respecto a la operación. Una operación de escritura volátil impide que las operaciones de memoria anteriores se reordene para que se produzcan después de la escritura volátil. Una operación de lectura volátil impide que las operaciones de memoria posteriores se reordenen para que se produzcan antes de la lectura volátil. Estas operaciones pueden implicar barreras de memoria en algunos procesadores, lo que puede afectar al rendimiento.

Nota

  • En un sistema multiprocesador, no se garantiza que una operación de lectura volátil obtenga el valor más reciente escrito en esa ubicación de memoria por cualquier procesador. De forma similar, una operación de escritura volátil no garantiza que el valor escrito sea inmediatamente visible para otros procesadores.
  • En un sistema de uniprocesador, las lecturas y escrituras volátiles garantizan que un valor se lee o escribe en la memoria y no se almacena en caché (por ejemplo, en un registro del procesador). Por lo tanto, puede usar estas operaciones para sincronizar el acceso a un campo que otro subproceso o hardware puede actualizar.

Las operaciones de memoria volátil son para casos especiales de sincronización, donde el bloqueo normal no es una alternativa aceptable. En circunstancias normales, la instrucción de C#lock, la instrucción Visual Basic SyncLock y la Monitor clase proporcionan la forma más sencilla y menos propensa a errores de sincronizar el acceso a los datos, y la Lazy<T> clase proporciona una manera sencilla de escribir código de inicialización diferida sin usar directamente el bloqueo de doble comprobación.

Los Volatile.Read métodos y Volatile.Write habilitan la funcionalidad que no se admite en idiomas. Por ejemplo:

  • Algunos lenguajes, como Visual Basic, no reconocen el concepto de operaciones de memoria volátil. La Volatile clase proporciona esa funcionalidad en estos lenguajes.

    Nota

    Llamar a uno de estos métodos afecta solo a un solo acceso a memoria. Para proporcionar una sincronización eficaz para un campo, todo el acceso al campo debe usar Volatile.Read y Volatile.Write.

  • En C#, el uso del volatile modificador en un campo garantiza que cada acceso a ese campo sea una operación de memoria volátil, pero el volatile modificador no se puede aplicar a los elementos de matriz. Los Volatile.Read métodos y Volatile.Write se pueden usar en elementos de matriz.

Métodos

Read(Boolean)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(Byte)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(Double)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(Int16)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(Int32)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(Int64)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(IntPtr)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(SByte)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(Single)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(UInt16)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(UInt32)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(UInt64)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read(UIntPtr)

Lee el valor del campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Read<T>(T)

Lee la referencia al objeto desde el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura tras este método en el código, el procesador no puede moverla antes de este método.

Write(Boolean, Boolean)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(Byte, Byte)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(Double, Double)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(Int16, Int16)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(Int32, Int32)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(Int64, Int64)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(IntPtr, IntPtr)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(SByte, SByte)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(Single, Single)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(UInt16, UInt16)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(UInt32, UInt32)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(UInt64, UInt64)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write(UIntPtr, UIntPtr)

Escribe el valor especificado en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Write<T>(T, T)

Escribe la referencia de objeto especificada en el campo especificado. En los sistemas que lo requieren, inserta una barrera de memoria que impide que el procesador reordene las operaciones de memoria del modo siguiente: si aparece una operación de lectura o de escritura antes de este método en el código, el procesador no puede moverla después de este método.

Se aplica a

Consulte también