원본 그림 (Memory Barriers: a Hardware View for Software Hackers)에서 해당 그림의 텍스트를 복사합니다.메모리 장벽 : 소프트웨어 해커를위한 하드웨어보기 예 3
표 4는 CPU 0, 1 및 2에서 동시에 실행되는 세 개의 코드 조각을 보여줍니다. 모든 변수는 초기에 0입니다.
3 번 줄에서 CPU 0이 "b"로 지정 될 때까지 CPU 1도 CPU 2도 5 번 줄로 진행할 수 없습니다. CPU 1과 2가 4 번 줄에서 메모리 장벽을 실행하면 둘 다 2 행의 메모리 배리어 앞에있는 CPU 0의 모든 배정을 볼 수 있습니다. 마찬가지로 8 행의 CPU 0의 메모리 장벽은 4 행의 CPU 1 및 2와 쌍을 이룹니다. 따라서 CPU 0은 줄의 "e"할당을 실행하지 않습니다 "a"에 대한 할당이 다른 CPU들 모두에게 보여 질 때까지 9. 따라서 9 번 줄에있는 CPU 2의 어설 션은 실행되지 않습니다. 나에게
은 CPU0에 선 6-9, 전혀 불필요한 보인다 CPU에 4 호선에 CPU 0 및 메모리 장벽에 대한 2 호선의 메모리 장벽 1 &이 보장 효과가 있기 때문에 b=1
이 픽업되며, 이전 상점도 모두 a=1
입니다. 그런 다음 assert e == 0 || a == 1
이 항상 성공합니다.
내가 간과 한 것인지 모르겠다. 어떤 설명도 감사하겠습니다.