[게임서버] 상호배제 - Monitor.Enter, Monitor.Exit

2022. 5. 24. 16:15·공부/게임 서버
728x90

직전 게시글에 쓴 Interlocked 외에도 원자성을 억지로 만들어줄 수 있는 기능이 있다. Monitor가 그것이다.

 

using System;

namespace ServerStudy
{
    class Program
    {
        static int number = 0;
        static object _lock = new object();

        static void Thread_1()
        {
            for (int i = 0; i < 100000; i++)
            {
                Monitor.Enter(_lock);
                number++;
                Monitor.Exit(_lock);
            }
        }
        static void Thread_2()
        {
            for (int i = 0; i < 100000; i++)
            {
                Monitor.Enter(_lock);
                number--;
                Monitor.Exit(_lock);
            }
        }

        static void Main(string[] args)
        {
            Task t1 = new Task(Thread_1);
            Task t2 = new Task(Thread_2);
            t1.Start();
            t2.Start();

            Task.WaitAll(t1, t2);

            Console.WriteLine(number);
        }
    }
}

 

원자성을 보존하고 싶은 내용의 위 아래로 Monitor.Enter과 Monitor.Exit을 넣어주면 안에 내용이 다 실행되기 전에 다른 스레드가 실행되는 일이 없어진다. 이렇게 다른 스레드에서도 사용되는 number와 같은 공유 자원이 동시에 사용되는 것을 막기 위한 알고리즘을 상호배제라고 한다.

728x90

'공부 > 게임 서버' 카테고리의 다른 글

[게임서버] Context Switching이란? (Thread.Sleep(1), Thread.Sleep(0), Thread.Yield())  (0) 2022.05.26
[게임서버] 스핀락(Spinlock)이란?  (0) 2022.05.25
[게임서버] Interlocked란?  (0) 2022.05.24
[게임서버] Temporal locality, Spatial locality  (0) 2022.05.23
[게임서버] 메모리 배리어(Memory Barrier)란?  (0) 2022.05.23
'공부/게임 서버' 카테고리의 다른 글
  • [게임서버] Context Switching이란? (Thread.Sleep(1), Thread.Sleep(0), Thread.Yield())
  • [게임서버] 스핀락(Spinlock)이란?
  • [게임서버] Interlocked란?
  • [게임서버] Temporal locality, Spatial locality
돌멩이수프
돌멩이수프
Information technology
  • 돌멩이수프
    WHAT DOES "IT" STAND FOR?
    돌멩이수프
  • 전체
    오늘
    어제
    • 분류 전체보기 (238) N
      • 언어 (73)
        • html (3)
        • css (1)
        • java (6)
        • C (26)
        • C++ (2)
        • C# (29)
      • 공부 (7)
        • Unity (43)
        • 게임 서버 (26)
        • 네트워크 (5)
        • 데이터베이스 (7)
        • EFCore (19)
        • 기타 (14)
        • Git (5)
        • 운영체제 (1)
        • 소프트웨어공학 (21)
      • 2024-여름 (12)
      • 자기 관리 (3) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    디자인패턴
    게임서버
    HTML
    EFCore
    C
    네트워크
    코딩
    Python
    java
    C#
    C언어
    tcp
    coding
    백준
    라즈베리파이
    유니티
    Entityfamework
    EntityFramework
    unity
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
돌멩이수프
[게임서버] 상호배제 - Monitor.Enter, Monitor.Exit
상단으로

티스토리툴바