Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
'variable': un campo volatile non può essere di tipo 'type'
I campi dichiarati con la volatile parola chiave devono essere uno dei tipi seguenti:
Qualsiasi tipo di riferimento.
Qualsiasi tipo di puntatore (in un
unsafecontesto).sbyteTipi ,byte,shortushort,int,uint,char, ,float, .boolTipi di enumerazione basati su uno dei tipi elencati.
L'esempio seguente genera l'errore CS0677:
// CS0677.cs
class TestClass
{
private volatile long i; // CS0677
public static void Main()
{
}
}
Possibili soluzioni alternative
In alcuni scenari potrebbe essere possibile usare nint (intero con dimensioni native) anziché long come soluzione alternativa per CS0677. Il nint tipo supporta l'accesso atomico e può essere usato con la volatile parola chiave :
class TestClass
{
private volatile nint i; // This compiles successfully
public static void Main()
{
}
}
Il nint tipo è un numero intero di dimensioni native a 32 bit su piattaforme a 32 bit e a 64 bit su piattaforme a 64 bit. Nelle piattaforme a 64 bit, nint ha le stesse dimensioni e intervallo di long, ma è progettato per garantire l'accesso atomico. Questa soluzione alternativa è più appropriata quando:
- Il codice è destinato a piattaforme a 64 bit in cui
nintviene fornito lo stesso intervallo dilong. - È necessario l'accesso atomico a un valore intero di grandi dimensioni in un contesto multithreading.
- Il comportamento delle dimensioni integer specifiche della piattaforma è accettabile per il caso d'uso.
Per altre informazioni sui numeri interi di dimensioni native, vedere Tipi numerici integrali.
Come materiale sussidiario generale sulla programmazione thread-safe, prendere in considerazione l'uso Interlocked di operazioni o l'istruzione lock anziché i volatile campi.