Search

뮤텍스

class
운영체제
상태
완료
날짜
목차

뮤텍스

뮤텍스는 상호 배제(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#
복사

뮤텍스의 장단점

장점
소유권 개념이 있어, 뮤텍스를 획득한 스레드만이 뮤텍스를 해제할 수 있습니다. 이는 더 안전한 동기화를 가능하게 합니다.
단점
한 번에 하나의 스레드만이 리소스에 접근할 수 있어, 경우에 따라 리소스 활용도가 낮아질 수 있습니다.