리눅스

(리눅스) 뮤텍스와 세마포어 차이점

재히hj 2022. 11. 10. 02:19
728x90

가장 큰 차이점은 동기화 대상의 개수 이다.

*Mutex는 동기화 대상이 오직 1개일 때 사용하며, Semaphore는 동기화 대상이 1개 이상일 때 사용한다.

*Mutex는 자원을 소유할 수 있고, 책임을 가지는 반면 Semaphore는 자원 소유가 불가하다.

*Mutex는 상태가 0, 1 뿐이므로 Lock을 가질 수 있고, 소유하고 있는 스레드만이 이 Mutex를 해제할 수 있습니다. 반면 Semaphore는 Semaphore를 소유하지 않는 스레드가 Semaphore를 해제할 수 있다. (정신 나간 사람의 유무)
즉, 세마포어는 Signaling 메커니즘으로 락을 걸지 않은 스레드/프로세스도 signal을 사용해 락을 해제할 수 있는 말이다.

*Semaphore는 시스템 범위에 걸쳐 있고, 파일 시스템 상의 파일로 존재한다. 반면, Mutex는 프로세스의 범위를 가지며 프로세스 종료될 때 자동으로 Clean up 된다.

*Semaphore는 Mutex가 될 수 있지만 Mutex는 Semaphore가 될 수 없다.

728x90