Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
'variable': un campo volátil no puede ser del tipo 'type'
Los campos declarados con la volatile palabra clave deben ser uno de los siguientes tipos:
Cualquier tipo de referencia.
Cualquier tipo de puntero (en un
unsafecontexto).Los tipos
sbyte,byte,short,ushort,int,uint,char,float, .boolTipos de enumeración basados en cualquiera de los tipos enumerados.
El ejemplo siguiente genera la advertencia CS0677:
// CS0677.cs
class TestClass
{
private volatile long i; // CS0677
public static void Main()
{
}
}
Posibles soluciones alternativas
En algunos escenarios, es posible que pueda usar nint (entero de tamaño nativo) en lugar de long como solución alternativa para CS0677. Se garantiza que el nint tipo admite el acceso atómico y se puede usar con la volatile palabra clave :
class TestClass
{
private volatile nint i; // This compiles successfully
public static void Main()
{
}
}
El nint tipo es un entero de tamaño nativo que es de 32 bits en plataformas de 32 bits y de 64 bits en plataformas de 64 bits. En las plataformas de 64 bits, nint tiene el mismo tamaño y rango que long, pero está diseñado para garantizar el acceso atómico. Esta solución alternativa es más adecuada cuando:
- El código tiene como destino plataformas de 64 bits, donde
nintproporciona el mismo intervalo quelong. - Necesita acceso atómico a un valor entero grande en un contexto multiproceso.
- El comportamiento del tamaño entero específico de la plataforma es aceptable para su caso de uso.
Para obtener más información sobre los enteros de tamaño nativo, vea Tipos numéricos enteros.
Como guía general sobre la programación segura para subprocesos, considere la posibilidad de usar Interlocked operaciones o la lock instrucción en lugar de volatile campos.