[c#] C# 스레드 뮤텍스
C#에서 스레드 간 동기화를 위해 뮤텍스(mutex)를 사용할 수 있습니다. 뮤텍스는 여러 스레드가 공유 자원에 안전하게 접근할 수 있도록 도와주는 동기화 메커니즘입니다.
뮤텍스 생성 및 사용
뮤텍스를 생성하고 사용하는 방법은 다음과 같습니다.
using System;
using System.Threading;
class Program
{
static Mutex mutex = new Mutex();
static void Main()
{
Thread thread1 = new Thread(DoWork);
Thread thread2 = new Thread(DoWork);
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
mutex.Dispose();
}
static void DoWork()
{
mutex.WaitOne();
// 뮤텍스 보호 영역 안에서 작업 수행
mutex.ReleaseMutex();
}
}
위의 예제 코드에서 Mutex
클래스를 사용하여 뮤텍스를 생성하고, WaitOne
메서드로 뮤텍스에 대한 신호를 기다리고, ReleaseMutex
메서드로 뮤텍스를 해제합니다.
뮤텍스 사용 시 주의할 점
- 뮤텍스를 사용할 때에는 뮤텍스를 안전하게 해제해야 합니다. 그렇지 않으면 뮤텍스가 계속 차단되어 있는 상태가 될 수 있습니다.
- 뮤텍스를 사용하면 경합 상태(race condition)를 해결할 수 있지만, 잘못 사용하면 데드락(deadlock)이 발생할 수 있으므로 주의해야 합니다.
이렇게 C#에서 뮤텍스를 사용하여 스레드 간 동기화를 구현할 수 있습니다.
참고 자료
- Microsoft 문서: Mutex Class
- C# 스레드 동기화 관련 서적: Joseph Albahari와 Ben Albahari의 “C# 7.0 in a Nutshell”