두 개의 변수가 동일한 CPU 캐시 라인에 저장된다고 가정합니다. CAS가 변수 중 하나를 성공적으로 CAS하면 CAS 명령어 바로 다음에 전체 캐시 라인이 업데이트됩니까?비교 및 스왑 후에 CPU 캐시 라인을 비 웁니 까?
답변
업데이트 할 필요가 없습니다. 이미 업데이트되었습니다. 캐시 가시성 (일반 시스템 및 메모리 유형)은 일반 작업으로 읽은 캐시 라인이 전체 메모리가 일정하고 일관되게 업데이트 된 것처럼 동일한 결과를 보장합니다. 반면에 부분, WC, 스트리밍 또는 기타 필수적이지 않은 일관성있는 액세스를 처리하는 경우 해당 보증을받지 못합니다.
잠긴 작업의 경우 일반적으로 캐시 라인을 통한 내부 잠금을 잡아 하드웨어에서 수행되므로 CAS가 원자 적으로 수행 (읽기 - 수정 - 쓰기)되지만 캐시 일관성과 직교합니다. 수행 한 작업과 상관없이 (단순 저장소에서조차도), 해당 캐시 라인을 "후"(같은 스레드의 프로그램 순서가 더 젊거나 다른 스레드/코어에서 나중에 시간순으로) 치는 모든 읽기 작업은 라인을 보게됩니다 CAS 작업 후. 물론 다른 스레드의 액세스는 해당 작업 전에 줄을 스누핑하고 시스템 메모리 순서 및 코드에 대한 예방 조치에 따라 이전 데이터를 볼 수도 있습니다.
예, 해당 캐시 라인에서 전체 메모리 장벽입니다. 따라서 동일한 캐시 라인에서 다른 변수를 업데이트 한 다음 원자 연산을 수행하면 값이 다른 모든 프로세스/스레드에 표시됩니다. 당신이 캐시 라인에 다른 변수에 비 원자 업데이 트를 할 경우, 당신은 여전히 데이터가 다른 프로세서 반대로 그것을 만들 같은 시간에 쓸 것이라는 보장이없는 말했다되고 그건
같은 캐시 라인에있는 다른 변수에 저장합니다. 귀하가 보장 한 것은 해당 데이터가 방금 쓴 데이터인지 또는 다른 스레드가 작성한 데이터인지 여부입니다.
- 1. Flex/Flash는 어떻게 메모리를 비 웁니 까?
- 2. ctypes는 메모리를 언제 비 웁니 까?
- 3. 비활성 탭에서 데이터를 어떻게 비 웁니 까?
- 4. L2 캐시 CPU 비교
- 5. 비교 및 스왑 C++
- 6. 어떻게 UIStoryboard를 통해 인스턴스화 된 UITableView를 올바르게 비 웁니 까?
- 7. std :: getline()이 버퍼를 완전히 비 웁니 까?
- 8. 비교 및 스왑 잘못된 값
- 9. 보다 큼 비교 및 스왑 제목으로
- 10. 쓰기 후에 CPU 캐시 라인이 메모리로 플러시되는 시점은 언제입니까?
- 11. 읽기 데이터 라인을 비교 및
- 12. "Empty Cache and Hard Reload"는 전체 캐시 또는 현재 사이트와 관련된 부분 만 비 웁니 까?
- 13. 간단한 정렬 프로그램에서 개수 비교 및 스왑
- 14. 캐시 라인 플러시가 전체 라인을 메모리에 씁니 까?
- 15. 캐시 및 파일 비교 C#
- 16. 오프셋 (비 연속적)을 사용하여 CPU 캐시 데이터 필요
- 17. CPU 캐시 무효화
- 18. 프로그래밍 가능한 CPU 캐시?
- 19. 비교 CPU 실적 -
- 20. iOS ASIHTTPRequest [request temporaryFileDownloadPath]; 자동으로 파일을 다운로드하고 지 웁니 까?
- 21. 상관 MQGET은 대기열에있는 다른 만료 된 메시지를 지 웁니 까?
- 22. session.invalidate()는 모든 세션 관련 데이터를 지 웁니 까?
- 23. 정렬 스택 오버플로 및 비교 수 및 스왑 수 음수
- 24. 비 CPU 리소스 스케줄링
- 25. 프로그래밍 방식으로 Java \ CPU 캐시 지우기
- 26. 비 표준화 유형 비교
- 27. infinispan과 Jboss 캐시 비교
- 28. 비슷한 내용의 페이지에 대한 UIPageViewController 캐시 및 스왑 뷰 계층
- 29. Java 지속성의 트랜잭션 및 비 트랜잭션 캐시
- 30. 은 CAS (비교 및 스왑)가 완벽하게 작동합니까?