목차
뮤텍스
뮤텍스는 상호 배제(Mutual Exclusion)의 약자로, 동시에 하나의 스레드만이 특정 코드(주로 공유 리소스에 대한 접근)를 실행할 수 있게 보장합니다.
뮤텍스는 시스템 전역에서 사용될 수 있으며, 다른 프로세스에 의해 생성되고 사용될 수 있는 네임드 뮤텍스와 같은 고급 기능을 제공합니다.
뮤텍스는 소유권 개념을 가지고 있어, 락을 획득한 스레드만이 이를 해제할 수 있습니다.
뮤텍스는 모니터(락)과 다르게 여러 프로세스 간에 동기화에 사용할 수 있습니다.
C#에서의 뮤텍스
예를 들어, 네트워크 게임 서버에서 여러 게임 클라이언트가 동일한 게임 데이터에 접근해야 하는 상황을 생각해볼 수 있습니다.
using System;
using System.Threading;
class GameServer {
// 시스템 전역에서 고유한 이름으로 네임드 뮤텍스 생성
private static Mutex mutex = new Mutex(false, "GameServerMutex");
public void UpdateGameState() {
try {
// 뮤텍스 락 획득 시도
bool isAcquired = mutex.WaitOne(TimeSpan.FromSeconds(5));
if (isAcquired) {
// 공유 게임 데이터를 안전하게 업데이트
Console.WriteLine("Updating game ...");
// 여기서 게임 로직을 수행합니다.
Console.WriteLine("Game updated successfully.");
} else {
Console.WriteLine("Failed to acquire the mutex. Another instance might be updating the game state.");
}
} finally {
// 뮤텍스 락 해제
mutex.ReleaseMutex();
}
}
static void Main(string[] args) {
var server = new GameServer();
server.UpdateGameState();
// 애플리케이션이 계속 실행 중인 경우에 대한 로직 추가
}
}
C#
복사
뮤텍스의 장단점
•
장점
◦
소유권 개념이 있어, 뮤텍스를 획득한 스레드만이 뮤텍스를 해제할 수 있습니다. 이는 더 안전한 동기화를 가능하게 합니다.
•
단점
◦
한 번에 하나의 스레드만이 리소스에 접근할 수 있어, 경우에 따라 리소스 활용도가 낮아질 수 있습니다.