'variable': 휘발성 필드는 'type' 형식일 수 없습니다.
키워드로 volatile 선언된 필드는 다음 형식 중 하나여야 합니다.
모든 참조 형식입니다.
컨텍스트의 모든 포인터 형식입니다
unsafe.형식
sbyte, ,byte,short,ushortint,uintchar,floatbool.나열된 형식을 기반으로 하는 열거형 형식입니다.
다음 샘플에서는 CS0677을 생성합니다.
// CS0677.cs
class TestClass
{
private volatile long i; // CS0677
public static void Main()
{
}
}
잠재적 해결 방법
일부 시나리오에서는 CS0677에 대한 해결 방법으로 대신 (네이티브 크기 정수)long를 사용할 nint 수 있습니다. 형식은 nint 원자성 액세스를 지원하며 키워드와 함께 volatile 사용할 수 있습니다.
class TestClass
{
private volatile nint i; // This compiles successfully
public static void Main()
{
}
}
이 nint 형식은 32비트 플랫폼에서 32비트, 64비트 플랫폼에서 64비트인 네이티브 크기의 정수입니다. 64비트 플랫폼에서 nint 는 크기와 범위가 동일 long하지만 원자성 액세스를 보장하도록 설계되었습니다. 이 해결 방법은 다음 경우에 가장 적합합니다.
- 코드는 동일한 범위를
long제공하는 64비트 플랫폼을nint대상으로 합니다. - 다중 스레드 컨텍스트에서 큰 정수 값에 원자성 액세스가 필요합니다.
- 플랫폼별 정수 크기 동작은 사용 사례에 허용됩니다.
네이티브 크기의 정수에 대한 자세한 내용은 정수 숫자 형식을 참조하세요.
스레드로부터 안전한 프로그래밍에 대한 일반적인 지침으로 필드 대신 volatile 작업 또는 lock 문을 사용하는 Interlocked 것이 좋습니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET