Compartilhar via


Volatile Classe

Definição

Contém métodos para executar operações de memória voláteis.

public ref class Volatile abstract sealed
public static class Volatile
type Volatile = class
Public Class Volatile
Herança
Volatile

Comentários

Em um sistema multiprocessador, devido a otimizações de desempenho no compilador ou processador, as operações regulares de memória podem parecer ser reordenadas quando vários processadores estiverem operando na mesma memória. As operações de memória volátil impedem determinados tipos de reordenação em relação à operação. Uma operação de gravação volátil impede que operações de memória anteriores sejam reordenadas após a gravação volátil. Uma operação de leitura volátil impede que operações de memória posteriores sejam reordenadas antes da leitura volátil. Essas operações podem envolver barreiras de memória em alguns processadores, o que pode afetar o desempenho.

Observação

  • Em um sistema multiprocessador, não há garantia de que uma operação de leitura volátil obtenha o valor mais recente gravado nesse local de memória por qualquer processador. Da mesma forma, uma operação de gravação volátil não garante que o valor gravado seja imediatamente visível para outros processadores.
  • Em um sistema uniprocessador, leituras e gravações voláteis garantem que um valor seja lido ou gravado na memória e não seja armazenado em cache (por exemplo, em um registro de processador). Assim, você pode usar essas operações para sincronizar o acesso a um campo que pode ser atualizado por outro thread ou por hardware.

As operações de memória volátil são para casos especiais de sincronização, em que o bloqueio normal não é uma alternativa aceitável. Em circunstâncias normais, a instrução C#lock, a instrução Visual Basic SyncLock e a Monitor classe fornecem a maneira mais fácil e menos propensa a erros de sincronizar o acesso aos dados, e a Lazy<T> classe fornece uma maneira simples de escrever código de inicialização lento sem usar diretamente o bloqueio verificado duas vezes.

Os Volatile.Read métodos e os Volatile.Write métodos habilitam a funcionalidade que não tem suporte em idiomas. Por exemplo:

  • Alguns idiomas, como Visual Basic, não reconhecem o conceito de operações de memória volátil. A Volatile classe fornece essa funcionalidade nesses idiomas.

    Observação

    Chamar um desses métodos afeta apenas um único acesso à memória. Para fornecer sincronização eficaz para um campo, todo o acesso ao campo deve ser usado Volatile.Read e Volatile.Write.

  • Em C#, usar o volatile modificador em um campo garante que todo acesso a esse campo seja uma operação de memória volátil, mas o volatile modificador não pode ser aplicado a elementos de matriz. Os Volatile.Read métodos e os Volatile.Write métodos podem ser usados em elementos de matriz.

Métodos

Read(Boolean)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(Byte)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(Double)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(Int16)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(Int32)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(Int64)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(IntPtr)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(SByte)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(Single)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(UInt16)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(UInt32)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(UInt64)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read(UIntPtr)

Lê o valor do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Read<T>(T)

Lê a referência de objeto do campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer após esse método no código, o processador não poderá movê-la para antes desse método.

Write(Boolean, Boolean)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(Byte, Byte)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(Double, Double)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(Int16, Int16)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(Int32, Int32)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(Int64, Int64)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(IntPtr, IntPtr)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(SByte, SByte)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(Single, Single)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(UInt16, UInt16)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(UInt32, UInt32)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(UInt64, UInt64)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write(UIntPtr, UIntPtr)

Grava o valor especificado no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Write<T>(T, T)

Grava a referência de objeto especificada no campo especificado. Em sistemas que precisam dele, insere uma barreira de memória que impede que o processador reordene as operações de memória da seguinte maneira: se uma leitura ou gravação aparecer antes desse método no código, o processador não poderá movê-la para depois desse método.

Aplica-se a

Confira também