• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • AutoResetEvent: 멀티쓰레딩 동기화의 신호등
    2024년 03월 18일
    • 유니얼
    • 작성자
    • 2024.03.18.:10
    728x90

    C# 게임 서버 만들기

    멀티쓰레딩 환경에서 쓰레드 간의 동기화는 애플리케이션의 안정성과 성능을 결정짓는 핵심 요소입니다. .NET 프레임워크는 이를 위한 여러 동기화 메커니즘을 제공하며, AutoResetEvent는 그중 하나입니다. 이 글에서는 AutoResetEvent의 개념과 사용 방법, 그리고 실제 예제 코드를 통해 어떻게 사용되는지 알아보겠습니다.

    AutoResetEvent이란?

    AutoResetEvent는 쓰레드 간의 신호 전달을 위한 동기화 프리미티브(primitive)입니다. 이름에서 알 수 있듯이, 이벤트가 신호 상태로 설정된 후 자동으로 비신호 상태로 재설정됩니다. 이를 통해 쓰레드는 특정 조건이 충족될 때까지 대기하다가, 조건이 충족되면 신호를 받고 계속해서 실행할 수 있습니다.

    작동 방식

    AutoResetEvent 객체는 기본적으로 두 가지 상태, 즉 신호 상태와 비신호 상태를 가집니다.

    • Set() 메서드를 호출하면 AutoResetEvent는 신호 상태가 됩니다. 이 상태에서 대기 중인 쓰레드 중 하나가 실행을 재개합니다.
    • WaitOne() 메서드를 호출하는 쓰레드는 AutoResetEvent가 신호 상태가 될 때까지 대기합니다. 신호 상태가 되면 해당 쓰레드는 실행을 재개하고, AutoResetEvent는 자동으로 비신호 상태로 재설정됩니다.

    사용 예제 코드

    AutoResetEvent는 작업자 쓰레드가 작업을 완료할 때까지 메인 쓰레드가 대기해야 하는 시나리오 등에 유용하게 사용될 수 있습니다.

    다음 예제는 AutoResetEvent를 사용하여 메인 쓰레드가 작업자 쓰레드의 작업 완료를 기다리는 과정을 보여줍니다.

    using System;
    using System.Threading;
    
    class AutoResetEventExample
    {
        private static AutoResetEvent autoEvent = new AutoResetEvent(false);
    
        static void Main(string[] args)
        {
            Console.WriteLine("메인 쓰레드: 작업자 쓰레드 시작 요청");
            Thread worker = new Thread(WorkerThread);
            worker.Start();
    
            Console.WriteLine("메인 쓰레드: 작업자 쓰레드의 작업 완료 대기");
            autoEvent.WaitOne();
            Console.WriteLine("메인 쓰레드: 작업자 쓰레드의 작업 완료 확인");
        }
    
        static void WorkerThread()
        {
            Console.WriteLine("작업자 쓰레드: 작업 시작");
            Thread.Sleep(5000); // 가상의 작업 시간
            Console.WriteLine("작업자 쓰레드: 작업 완료");
    
            // 작업 완료를 메인 쓰레드에 신호
            autoEvent.Set();
        }
    }
    ;

    이 예제에서 메인 쓰레드는 AutoResetEvent의 WaitOne 메서드를 호출하여 작업자 쓰레드의 작업이 완료될 때까지 대기합니다. 작업자 쓰레드는 작업을 마친 후 Set 메서드를 호출하여 메인 쓰레드에게 작업 완료를 신호합니다. 이 신호를 받은 메인 쓰레드는 대기 상태에서 벗어나 후속 작업을 계속 진행합니다.

    결론

    AutoResetEvent는 쓰레드 간 간단한 신호 전달에 매우 유용한 동기화 메커니즘입니다. 하지만 사용 시 신호 손실 또는 데드락과 같은 문제에 주의해야 합니다. 올바르게 사용한다면 AutoResetEvent는 멀티쓰레딩 애플리케이션에서 효율적인 동기화 솔루션을 제공할 수 있습니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바