메모리 배리어

ㅋㅋ·2022년 10월 27일

csharp게임서버

목록 보기
2/16
static void TestThread1()
{
    x = 1;
    Thread.MemoryBarrier();

    result1 = y;
}

static void TestThread2()
{
    y = 1;
    Thread.MemoryBarrier();

    result2 = x;
}

관련 없는 변수들을 사용할 때 최적화에 의해 코드 순서가 바뀔 수 있음

=> result1과 result2가 모두 0일 수 있음

이를 MemoryBarrier 함수를 통하여 억제


메모리 배리어

  • 코드 재배치 억제

  • 메모리 갱신(가시성)


  • full memory barrier
    ASM: MFENCE
    C#: Thread.MemoryBarrier
    Store, Load 모두 막음

  • store memory barrier
    ASM: SFENCE
    Store만 막음

  • load memory barrier
    ASM: LFENCE
    Load만 막음

0개의 댓글