2012-08-23 4 views
0

x64 : http://www.multicoreinfo.com/research/papers/2008/damp08-intel64.pdf의 메모리 정렬에 대한 인텔 문서를 읽었습니다. 잠긴 명령은 프로세서에 보이지 않게하는 전체 장벽을 발생시킵니다. 지정된 순서로 업데이트합니다. 그러나 장벽으로 인한 가시성에 대해서는 아무 것도 없습니다. 장벽은 다른 프로세서가 즉시 변수의 업데이트를 보게하거나 업데이트가 지정된 순서로만 다른 프로세서로 전파되지만 지정되지 않은 시간에 전파 할 수 있습니까?메모리 바리스터 및 표시 여부 - x64

예.

Thread1 :

flag = true; 
MemoryBarrier(); 

스레드 2 :

MemoryBarrier(); 
tmp = flag; 

합니까 스레드 2는 항상 플래그 = 스레드 1 스레드 2 전에 코드를 실행하는 경우는 true?

+0

링크가 끊어졌습니다. – sourcedelica

답변

3

장벽은 다른 프로세서가 지정된 순서로 업데이트를 보도록 보장하지만 그 일이 발생하지 않도록합니다.

후속 질문은 멀티 프로세서 시스템 [1]에서 "즉시"어떻게 정의합니까? 또는 스레드 1이 스레드 2 이전에 실행되도록하는 방법은 무엇입니까? 이 경우, 한 가지 대답은 스레드 1이 xchg와 같은 원자 명령어를 사용하여 플래그 변수에 저장소를 수행 한 다음 스레드 2가 플래그에서 회전하고 값이 변경되었다는 것을 알 때 진행됩니다 (길 x86 메모리 모델이 작동합니다. 스레드 2는 정상로드 명령어를 사용하여 회전 할 수 있습니다. 저장소가 원자 단위로 완료되면 충분합니다.

[1] 상대성 이론, 각 관찰자 (스레드) 자체의 "빛의 원뿔"을 통해 사건을 봅니다. 따라서 모든 관측통에 대해 단일 세계 시간과 같은 개념을 포기해야합니다.

+0

+1과 SR의 유추 : –

+0

그래, 그 비유는 정말 똑똑했습니다. +1 :) – Tudor