다음을 통해 공유


MemoryBarrier 함수(winnt.h)

CPU가 읽기 및 쓰기 작업을 다시 정렬하지 못하도록 하는 하드웨어 메모리 장벽(펜스)을 만듭니다. 컴파일러가 읽기 및 쓰기 작업을 다시 정렬하지 못할 수도 있습니다.

구문

void MemoryBarrier();

반환 값

없음

설명

프로그램 작업에 메모리 읽기 및 쓰기 작업의 순서가 중요한 경우 이 매크로 또는 연동 함수를 사용합니다.

_ReadBarrier, _WriteBarrier_ReadWriteBarrier 컴파일러 내장 함수는 컴파일러 다시 정렬만 방지합니다. Visual Studio 2003에서는 휘발성 에서 휘발성 참조로의 순서가 지정됩니다. 컴파일러는 휘발성 변수 액세스의 순서를 다시 지정하지 않습니다. 또한 Visual Studio 2005를 사용하면 컴파일러는 휘발성 변수에 대한 읽기 작업에 대한 의미 체계를 획득하고, CPU에서 지원하는 경우 휘발성 변수에 대한 쓰기 작업에 대한 의미 체계를 해제합니다. 자세한 내용은 동기화 및 다중 프로세서 문제를 참조하세요.

이 매크로는 Windows가 지원되는 모든 프로세서 플랫폼에서 호출할 수 있지만 일부 플랫폼에는 영향을 주지 않습니다. 정의는 플랫폼마다 다릅니다. 다음은 Winnt.h에서 이 매크로에 대한 몇 가지 정의입니다.


#ifdef _AMD64_
#define MemoryBarrier __faststorefence
#endif

#ifdef _IA64_
#define MemoryBarrier __mf
#endif

// x86

FORCEINLINE
VOID
MemoryBarrier (
    VOID
    )
{
    LONG Barrier;
    __asm {
        xchg Barrier, eax
    }
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 winnt.h(Windows.h 포함)

추가 정보

인터로 잠긴 변수 액세스