본문으로 바로가기

[리눅스] semaphore vs mutex

category 운영체제/리눅스 2023. 3. 19. 13:59
728x90
반응형

오늘은 자원 동기화에 필요한 semaphore 와 mutex에 대해 알아보겠습니다.

 

프로그램을 만들고 쓰레드1, 쓰레드2가 동시에 같은 전역변수에 접근한다고 가정해보겠습니다.

 

간단한 프로그램이라면 거의 동시에 접근할 경우가 없겠지만, 대량의 데이터를 처리하는 프로그램일수록 동시에 자원에 접근을 못하도록 제어를 해야됩니다.

 

그렇게 하지않을 경우 큰 문제가 발생할 수 있습니다.

 

그럴때 사용하는게 위의 두가지 입니다.

 

semaphore와 mutex는 모두 공유 자원에 대한 동기화를 제공하는 도구입니다.

 

semaphore는 세마포어의 카운트를 사용하여 여러 쓰레드가 같은 자원에 접근하는 것을 제어합니다.

 

즉, semaphore는 공유 자원의 가용성을 나타내는 카운터입니다.

 

semaphore는 다수의 쓰레드가 동시에 접근 가능한 자원의 개수를 지정하는 데 사용됩니다.

 

semaphore는 각 쓰레드가 블록되었다가 다른 쓰레드가 공유 자원을 해제할 때까지 대기하는 것이 가능합니다.

 

mutex는 흔히 말하는 상호 배제를 위한 도구입니다.

 

한 번에 하나의 쓰레드만 공유 자원에 접근할 수 있도록 보장합니다.

 

공유 자원에 대한 임계 영역을 만듭니다.

 

mutex를 사용하면 다수의 쓰레드가 자원에 접근하려고 시도하더라도 한 번에 하나의 스레드만이 자원에 액세스 할 수 있습니다.

 

다른 쓰레드는 블록되어 기다리게 됩니다.

 

mutex를 사용하면 임계 영역에서 스레드 간에 경쟁 조건이 발생하지 않도록 보장할 수 있습니다.

 

semaphore 와 mutex 둘다 설계를 잘해야 되고, 최악의 경우 계속 블록에 걸릴 수 있습니다.

일반적으로 mutex는 semaphore보다 더 빠르지만, 상황에 따라 다를 수 있습니다.

728x90
반응형