프로세스나 스레드가 공유자원을 lock()을 통해 잠금 설정하고 사용한 수에는 unlock()을 통해 잠금해제하는 객체입니다. 잠김이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근할 수 없고 해제는 반대입니다. 따라서, 뮤텍스는 공유된 자원의 데이터 혹은 임계영역 등에 하나의 프로세스 또는 스레드가 접근하는것을 막을 수 있습니다.
임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행될 수 있도록 하는 기술입니다.
세마포어는 일반화된 뮤텍스입니다. 간단한 정수 값과 두 가지 함수 wait(P함수) 및 signal(V함수)로 공유 자원에 대한 접근을 처리합니다.
프로세스나 스레드가 공유 자원에 접근하면 세마포어에서 wait() 작업을 수행하고, 프로세스나 스레드가 공유 자원을 해체하면 세마포어에서 signal() 작업을 수행합니다.
세마포어에는 조건 변수가 없소, 프로세스나 스레드가 세마포어의 값을 수정할 때 다른 프로세스나 세마포어는 동시에 세마포어 값을 수정할 수 없습니다.
일반적으로 비교적 긴 시간을 확보하는 리소스에 대해 사용합니다.
0과 1의 두 가지 값만 가질 수 있는 세마포어입니다.
여러 개의 값을 가질 수 있는 세마포어이며, 여러 자원에 대한 접근을 제어하는 데 사용됩니다.