본문 바로가기
서버

메모리 배리어

by Mostlove 2024. 7. 26.
728x90
반응형

namespace SeverCore
{
    internal class Program
    {
        //메모리 배리어
        //A)코드 재배치 억제
        //B) 가시설
         
        //1) Full Memory Barrier (ASM MFENCE, C$ Thread.MemoryBarrier) : Store/ Load 둘 다 막는다
        //2) Store Memory Barrier(ASM SFENCE) : Store만 막는다
        //3) Load Memory Barrier( ASM LFENCE) : Load만 막는다
        static int x = 0;
        static int y = 0;
        static int r1 = 0;
        static int r2 = 0;
        static void Thread_1()
        {
            y = 1;

            Thread.MemoryBarrier();
            r1 = x;
        }
        static void Thread_2()
        {
            x = 1;
            Thread.MemoryBarrier();
            r2 = y;
        }
        static void Main(string[] args)
        {
            int count = 0;
            while (true)
            {
                count++;
                x = y = r1 = r2 = 0;
                Task t1 = new Task(Thread_1);
                Task t2 = new Task(Thread_2);
                t1.Start();
                t2.Start();

                Task.WaitAll(t1, t2);
                if(r1 == 0 && r2 == 0)
                    break;

                
            }
            Console.WriteLine($"{count}번만에 빠져나옴!");
        }
    }
}

 

 

반응형

'서버' 카테고리의 다른 글

DeadLock  (0) 2024.07.30
Lock 기초  (0) 2024.07.30
디버그 최적화  (0) 2024.07.26
캐시  (0) 2024.07.26
멀티쓰레드  (0) 2024.07.26