세마포어

위키백과 ― 우리 모두의 백과사전.

세마포어(Semaphore)는 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로, 에츠허르 데이크스트라가 고안했다. 세마포어는 철학자들의 만찬 문제의 고전적인 해법이지만 모든 교착 상태를 해결하지는 못 한다.

세마포어 S는 정수값을 가지는 변수이며, 다음과 같이 P와 V라는 명령에 의해서만 접근할 수 있다. (P와 V는 각각 test와 increment를 뜻하는 네덜란드어 ProberenVerhogen의 머릿글자를 딴 것이다.)

P(S) {
    while S <=0
        ; // do nothing
    S--;
}

V(S) {
    S++;
}

이때 변수 값을 수정하는 연산은 모두 원자성을 만족해야 한다. 다시 말해, 한 쓰레드에서 세마포어 값을 변경하는 동안 다른 쓰레드가 동시에 이 값을 변경해서는 안된다.

[편집] 참고

세마포어(semaphore)의 원래 뜻은 기차 등에서 사용하는 '까치발 신호기'이다.

[편집] 바깥 고리