세마포어( Semaphore )

Programming 2010. 5. 31. 17:28
세마포어는 병렬 프로그래밍 환경에서 공동 리소스에 여러 프로세스들에 의한 엑세스를 제어하는 전통적인 방법이다. 세마포어는 바이너리와 카운팅의 두가지 형태를 일반적으로 취한다. 바이너리 세마포어는 간단히 "true/false"(locked/unlocked) 플래그이며, 하나의 리소스를 접근하는 것을 제어한다. 카운팅 세마포어는 여러 리소스를 위한 카운터이다. 각 세마포어 타입은 race condition 을 방지하기 위해 사용된다. ( race condition : 프로세스의 결과가 여러 이벤트의 타이밍이나 순서에 예상치 못하게 그리고 심각하게 의존하고 있을 때, 프로세스의 결점이나 문제를 말한다. 멀티 쓰레드 환경에서나 분산 프로그램에서 발생할 수 있다. 출처 : http://en.wikipedia.org/wiki/Race_conditions )
반면에, 세마포어는 리소스 데드락을 방지하는데는 아무런 의미가 없다. ( 예 : 식사하는 철학자 문제 )

Binary semaphore vs. Mutex vs. Event
: 뮤텍스 는 바이너리 세마포어로, 보통 소유권, 우선순위 역전( prioirty inversion ) 방지나 반복과 같은 추가의 특징을 포함한다. 뮤텍스가 특별하고, 더 빠른 루틴에 의해 실행되더라도, 뮤텍스와 세마포어의 차이점은 운영체제 의존도 이다. 뮤텍스는 상호배제에 사용되고, 바이너리 세마포어는 이벤트 알림에 사용되도록 의도된다.
정리하자면, 뮤텍스란, 상호배제로 크리티컬 섹션에 여러 Thread 가 동시에 접근하지 못하고 순차적으로 접근을 할 수 있도록 보장해주는 것을 뜻한다.( 공유 불가능한 자원의 동시 사용을 피함 ) 한 Thread 에서 크리티컬 섹션에서 진행 중일 때 다른 Thread 는 이를 기다렸다가, 크리티컬 섹션에서 작업 중인 Thread 가 크리티컬 섹션에서 벗어나면 기다리던 Thread가 순차적으로 진입을 하게 된다.
세마포어는, 데드락을 피하기 위한 기술로, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로 사용된다.

어떻게 보면 두개는 비슷한 것 같다. 명확히 차이를 말 못하겠다.. -_-; 어쿠.. 다음 기회에..ㅎ

출처 : http://en.wikipedia.org/wiki/Semaphore_(programming)

'Programming' 카테고리의 다른 글

ARM C Compiler  (0) 2010.09.18
[makefile]commands commence before first target 에러  (0) 2010.07.07
Event-driven programming  (0) 2010.05.31
undefined reference  (0) 2010.03.26
XML 이란?  (0) 2010.03.26

설정

트랙백

댓글