Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
'variable': um campo volátil não pode ser do tipo 'type'
Os campos declarados com a volatile palavra-chave devem ser um dos seguintes tipos:
Qualquer tipo de referência.
Qualquer tipo de ponteiro (em um
unsafecontexto).Os tipos
sbyte,byte,short, ,ushort,int,uint,char,float, .boolEnumerar tipos com base em qualquer um dos tipos listados.
O exemplo a seguir gera CS0677:
// CS0677.cs
class TestClass
{
private volatile long i; // CS0677
public static void Main()
{
}
}
Possíveis soluções alternativas
Em alguns cenários, você pode ser capaz de usar nint (inteiro de tamanho nativo) em vez de long como uma solução alternativa para CS0677. O nint tipo é garantido para dar suporte ao acesso atômico e pode ser usado com a volatile palavra-chave:
class TestClass
{
private volatile nint i; // This compiles successfully
public static void Main()
{
}
}
O nint tipo é um inteiro de tamanho nativo que tem 32 bits em plataformas de 32 bits e 64 bits em plataformas de 64 bits. Em plataformas de 64 bits, nint tem o mesmo tamanho e intervalo longque, mas foi projetado para garantir o acesso atômico. Essa solução alternativa é mais apropriada quando:
- Seu código tem como destino plataformas de 64 bits em que
nintfornece o mesmo intervalo quelong. - Você precisa de acesso atômico a um grande valor inteiro em um contexto multithreaded.
- O comportamento de tamanho inteiro específico da plataforma é aceitável para seu caso de uso.
Para obter mais informações sobre inteiros de tamanho nativo, consulte tipos numéricos integrais.
Como orientação geral sobre programação thread-safe, considere o uso Interlocked de operações ou a lock instrução em vez de volatile campos.