본문 바로가기
개발 이야기/C# 이야기

C# 닷넷 임계영역 뮤텍스

by 런던살자 2020. 10. 6.

안녕하세요 마블랑입니다.

 

Thread(쓰레드)를 이용한 프로그래밍을 할때 공통된 변수에 동시에 접근하면 데이터가 정확하게 나오지 않습니다.

 

정확한 데이터가 나오게 하려면 임계영역을 만들고 그 안에서 변수에 접근을 해야하는데요

 

이번 포스팅은 C#에서 임계영역을 만들어 여러 Thread(쓰레드)에서 접근할때 변수를 차례대로 사용하여 정확한 데이터를 사용하는 방법에 대해서 알아보겠습니다.

C#에서 임계영역을 만들때 여러가지 방법이 있겠지만 개인적으로 가장 간단하다고 생각하는 방법은 Mutex 클래스를 이용하는 것입니다.  

 

바로 사용법을 알아보겠습니다.

Mutex mutex; // Mutex 객체 선언

mutex = new Mutex(); // Mutex 객체 생성

mutex.WaitOne(); // 임계영역 설정

/*

전역변수 등 공통된 변수 접근..
...

*/

mutex.ReleaseMutex(); // 임계영역 해제

mutex.Close(); // Mutex 객체 닫기 

 

굉장히 쉽습니다. 객체를 생성해주고 WaitOne()으로 임계영역을 할당하고 변수를 다 사용하고 난뒤에 ReleaseMutex()로 임계영역을 해제해주면 됩니다.

 

주의할점은 ReleaseMutex()를 호출해주지 않으면 해당 임계영역이 계속 변수를 잡고 있으므로 버그가 발생할수 있습니다.

 

반드시 ReleaseMutex()를 사용하였는지 체크해주세요~

 

 

 

이상 마블랑이었습니다.

 

읽어주어서 고맙습니다.

댓글