Knowledge

[Knowledge] Mutex / Semaphore 란?

Jeong Jeon
반응형

이번에는 Mutex와 Semaphore에 대해서 알아보도록 하자..!

데드락 관련된 내용을 타고 들어가다보면 나오는말인데,,,, 말로 설명하는데 어려움이 있어 정리해두려고한다...!

공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 가능성이 있는데 이럴때 공유된 자원에 대해 접근을 통제하는 방식이다.

Mutex란?

MUTual EXclusion '상호 배제'라고 한다. 데드락 방지 4가지중에 있는것...!  Critical Section을 가진 Thread의 running time이 서로 겹치지 않게, 각각 단독으로 실행되게 하는 기술이다. 다수의 쓰래드(또는 프로세스)들의 공유 리소스에 대한 접근을  locking/unlocking을 통해 관리한다.

 

<특징>

1). 단 하나의 프로세스/스레드만 접근 가능하다.

- 뮤텍스가 사용되는 임계 구역은 공유가 불가능한 자원으로 한번에 단 하나의 프로세스/스레드만 접근이 가능하다

이때 사용중인 프로세스/스레드가 락(Lock)을 걸어버려 다른 프로세스/스레드의 접근을 막는다.

​2). 뮤텍스의 Lock은 해당 프로세스/스레드만 해제가 가능하다.

- 다른 프로세스나 스레드는 해당 락을 해제하여 자원에 접근하고자 할수 없다.

 

 => Critical Section(임계구역) : 프로그램 상 다수의 프로세스가 공유 자원에 접근하는 코드.  즉 프로그램 상에서 동시에 실행될때 문제를 일으킬 수 있는 부분이다.

 

Semaphore란?

공유 자원에 대해 동시에 접근할 수 있는 프로세스/스레드의 수를 변수로 제한하여 공유 자원의 접근을 제한하고, 공유자원의 사용이 끝나면 수를 - Counting하여 접근을 통제하는 방식이다. 

예를 들어 어떤 공유 자원의 세마포어를 10으로 잡는다면, 그자원은 동시에 최대 10개의 프로세스가 접근 가능하다는 의미이다.

쉽게 보면 기준값을 두고 그 값을 기준으로 접근/통제 하는 방식...!

그러므로 세마포어는 한정된 수의 사용자만을 지원할 수 있는 공유 자원에 대한 접근을 통제하는데 유용하다. 

 

<특징>

1). 자원을 소유하는 방식이 아닌, 해당 자원에 접근하기 위해 값을 두고 해당 값에 따라 접근을 통제하는 방식이다.

2). 뮤텍스는 한개의 동기화 대상을 기준으로 하지만, 세마포어는 동기화 대상이 1개 이상이다.

 

간단하게 확인해보았지만 뮤택스와 세마포어는 완벽한 데이터 무결성 및 데드락 해결 방식은 아니다.

이런식으로 풀면 해결되겠다 라고 생각했던 것들의 명칭이 있었고, 방식이 있었다 라는걸 느낄 수 있었던 부분인데, 글로 남겨놓으면서 한번더 짚고 넘어가자...!

반응형