세마포어
위키백과 ― 우리 모두의 백과사전.
세마포어(Semaphore)는 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로, 에츠허르 데이크스트라가 고안했다. 세마포어는 철학자들의 만찬 문제의 고전적인 해법이지만 모든 교착 상태를 해결하지는 못 한다.
세마포어 S는 정수값을 가지는 변수이며, 다음과 같이 P와 V라는 명령에 의해서만 접근할 수 있다. (P와 V는 각각 test와 increment를 뜻하는 네덜란드어 Proberen과 Verhogen의 머릿글자를 딴 것이다.)
P(S) { while S <=0 ; // do nothing S--; } V(S) { S++; }
이때 변수 값을 수정하는 연산은 모두 원자성을 만족해야 한다. 다시 말해, 한 쓰레드에서 세마포어 값을 변경하는 동안 다른 쓰레드가 동시에 이 값을 변경해서는 안된다.
[편집] 참고
세마포어(semaphore)의 원래 뜻은 기차 등에서 사용하는 '까치발 신호기'이다.