뮤텍스와 세마포어


뮤텍스(Mutex)

동시에 여러 스레드가 공유 자원에 접근하지 못하도록 한 번에 하나의 스레드만 접근을 허용함

하나의 스레드가 뮤텍스틑 획득(Lock)하면 다른 스레드는 대기 상태에 들어감
해당 스레드가 작업을 마친 후 뮤텍스를 반납(Unlock)하면 다른 대기 중인 스레드 중 하나가 뮤텍스를 획득하고 실행됨

공유 자원에 대해 배타적 접근 보장
뮤텍스를 획득한 스레드를 반드시 해제해야 함
한 번에 하나의 스레드만 뮤텍스 소유 가능

공유 자원에 한 번에 하나의 스레드만 접근해야 할 때 사용

세마포어(Semaphore)

동시에 여러 개의 스레드가 공유 자원에 접근할 수 있도록 허용하되, 최대 허용 개수를 설정함 뮤텍스는 세마포의 일종으로, 세마포어에서 허용 가능한 값이 1인 경우가 뮤텍스임

세마포어의 초기값은 동시에 접근할 수 있는 스레드를 의미함
스레드가 세마포어를 획득하면 값이 감소하고, 해제하면 값이 증가함
값이 0이 되면 다른 스레드는 대기 상태로 전환됨

동시 접근 허용 개수 설정 가능
제한된 개수의 리소스에 대해 접근 동기화 가능
값이 1인 세마포어는 뮤텍스와 동일하게 작동함

공유 자원에 복수의 스레드가 동시 접근 가능하되, 최대 개수를 제한할 때 사용






© 2020.08. by assu10

Powered by assu10