32 비트 프로세서에서 32 비트 int 읽기 / 쓰기의 원자성에 해당 하이퍼 스레드가 영향을 줄 수 있습니까?

StackOverflow https://stackoverflow.com//questions/9715016

문제

HyperThreading이 32 비트 프로세서에서 32 비트 INT (32 비트 프로세서에서)를 만들 수 있으며 경계가 정렬 되더라도 비 원자를 읽고 쓸 수 있습니다.하이퍼 스레딩 효과 가이 부분을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

사실이라면 하나의 특정 모델이나 스테핑에 특정한 끔찍한 CPU 버그가 될 것입니다. 32 비트 읽기 및 쓰기는 원자력이 x86 플랫폼의 속성에 근본적이며 Windows, Linux 및 많은 응용 프로그램 소프트웨어에 의존합니다.

이렇게 생각할 수있는 유일한 것은 하이퍼 스레드가있는 단일 물리적 코어 CPU로 하이퍼 스레딩없이 단일 코어 CPU에서 전환하는 것으로 생각할 수 있습니다. 하이퍼 스레딩이없는 단일 코어 x86 CPU에서 정렬 된 32 비트 변수의 읽기 수정 - 쓰기 작업을 수행하는 단일 명령어 (예 : 증분)는 잠금 접두사 없이도 원자입니다. (그들은 단지 발생하지는 않습니다.) 하이퍼 스레딩이있는 CPU는 두 개의 물리적 코어가있는 CPU와 같이 많은 것을 동작하므로 읽기 수정 - 쓰기 작업 (다른 Exchange)은 원자력을 보장하지 않습니다. 잠금 접두사.

이제는 대다수의 CPU의 대다수가 발생하기 때문에 이제는 관련이 없습니다. 따라서 정렬 된 32 비트 값의 단일 명령어 읽기 - 수정 기록 작업조차도 잠긴 경우 원자가 아닙니다. (접두사 없이도 잠겨 있기 때문에 Exchange는 예외적입니다.)

다른 팁

멀티 CPU 시스템에서도 항상 원자 또는 쓰기가 항상 원자입니다.원자력이 아닌 것은 무엇입니까 (그리고 이것은 아마 당신이 들었던 것일 수도 있고 적어도 당신이 듣고있는 것입니다.) 읽기 - 수정 - 쓰기 지침, 증분과 같이 메모리 대상으로 추가하십시오.그것들은 HT 시스템에서도 원자가 아닌이지만, 잠긴되지 않은 경우에도 단일 논리 CPU를 가진 시스템에서 원자력 (보증이 아니라 보증이 아닌 보증이 아니라).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top