일관성 전 발생의 이해
JLS(Java 언어 사양) 17장에서는 일관성 전 발생이라는 개념이 소개됩니다. . 간단히 말해서, A의 읽기 작업이 이후에 발생하는 쓰기 작업을 확인하지 않거나 A에 읽기 작업과 충돌하는 다른 쓰기 작업이 있는 경우 A 작업 집합은 일관성 이전에 발생합니다.
정의 이해
일관성 전 발생의 정의는 다음과 같이 해석할 수 있습니다. (a) 읽기 작업이 그 이후에 발생하는 쓰기 작업을 보는 것은 불가능합니다. (b) 읽기 작업과 동일한 변수에 쓰는 동일한 스레드에 또 다른 쓰기 작업이 있고 쓰기 작업이 읽기 작업보다 먼저 발생합니다.
일관성 전 발생의 예는 다음과 같습니다. 제공한 두 번째 실행 순서:
r2 = A; // sees write of A = 2 r1 = B; // sees write of B = 1 B = 1; A = 2;
이 경우 r2는 이전에 수행된 A에 대한 쓰기를 확인하고 r1은 B에 대한 쓰기를 확인합니다. 따라서 이 실행 순서는 일관성 이전에 발생합니다.
실제 애플리케이션에 미치는 영향
멀티 스레드 환경에서 발생 전 일관성은 스레드가 다른 스레드에 의해 수행된 쓰기를 올바른 순서로 볼 수 있도록 보장합니다. 그러나 읽기가 나중에 발생하는 쓰기를 확인하는 상황(재정렬이라고 함)이 있을 수 있습니다. 이는 개인 레지스터에 데이터를 일시적으로 저장할 수 있는 메모리 최적화 또는 하드웨어 캐시로 인해 발생할 수 있습니다.
재순서의 한 가지 예는 스레드가 변수에 썼지만 새 값이 다른 스레드에 표시되지 않는 경우입니다. 그것은 여전히 개인 레지스터에 저장되어 있습니다. 영향을 받은 변수가 스레드 간에 공유되는 경우 예상치 못한 동작 및 경쟁 조건이 발생할 수 있습니다.
재순서를 방지하기 위해 휘발성 필드를 사용할 수 있습니다. 휘발성 필드는 읽기 및 쓰기가 일관된 순서로 수행되고 모든 스레드가 동일한 값을 볼 수 있도록 보장합니다. 이는 읽기 및 쓰기가 개인 레지스터가 아닌 공유 메모리에 액세스하도록 강제함으로써 달성됩니다.
위 내용은 다중 스레드 환경에서 일관성이 어떻게 순서를 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!