Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 뮤텍스(Mutex) 클래스란? 개념부터 사용 예제까지

C# 뮤텍스(Mutex) 클래스란?

C#의 Mutex(뮤텍스) 클래스는 스레드 동기화를 위한 기본 요소(synchronization primitive)로, 하나의 프로세스 내부에서의 스레드 동기화뿐만 아니라 프로세스 간 동기화(interprocess synchronization)에도 활용할 수 있다는 점이 큰 특징입니다.

뮤텍스는 한 번에 하나의 스레드 또는 프로세스만 공유 자원에 접근할 수 있도록 제어하며, '소유권' 개념을 가지고 있어 락을 획득한 스레드만이 이를 해제할 수 있습니다.

새로운 뮤텍스 생성하기

가장 기본적인 방식으로 새로운 Mutex 인스턴스를 생성하는 코드는 다음과 같습니다.

private static Mutex m = new Mutex();

Boolean 값을 사용한 초기화

생성자에 Boolean 값을 전달하면 초기 소유권 여부를 지정할 수 있습니다. true를 전달하면 호출한 스레드가 뮤텍스의 초기 소유자가 됩니다.

private static Mutex m = new Mutex(true);

이름을 지정한 명명된(Named) 뮤텍스 생성

Boolean 값과 함께 뮤텍스 이름을 문자열로 전달하면 명명된(named) 뮤텍스를 만들 수 있습니다. 명명된 뮤텍스는 운영체제 차원에서 관리되므로 서로 다른 프로세스 간의 동기화에 사용할 수 있습니다.

예제 코드

using System;
using System.Threading;

public class Demo {
    public static void Main() {
        Mutex mt = new Mutex(false, "NewMutex");
        Console.WriteLine("Waiting for the Mutex.");
        mt.WaitOne();
        Console.WriteLine("Owner of the mutex. ENTER is to be pressed to release the mutex and exit.");
        Console.ReadLine();
        mt.ReleaseMutex();
    }
}

실행 결과

Waiting for the Mutex.
Owner of the mutex. ENTER is to be pressed to release the mutex and exit.

코드 동작 흐름 설명

  • new Mutex(false, "NewMutex") : 초기 소유권 없이 "NewMutex"라는 이름의 명명된 뮤텍스를 생성합니다.
  • WaitOne() : 뮤텍스의 소유권을 요청합니다. 이미 다른 스레드나 프로세스가 소유 중이라면 대기 상태가 됩니다.
  • ReleaseMutex() : 뮤텍스 소유권을 해제하여 다른 스레드나 프로세스가 자원에 접근할 수 있도록 합니다.

프로그램을 실행하면 먼저 뮤텍스 소유권을 기다린 뒤, 획득에 성공하면 콘솔에 메시지가 출력됩니다. 이후 Enter 키를 누르면 뮤텍스가 해제되면서 프로그램이 종료됩니다.