세마포어(Semaphore)
2023. 3. 9. 14:01ㆍCS
세마포어(Semaphore)는 상호 배제(Mutual Exclusion)를 비롯한 동기화 기능을 제공하는 동기화 기법 중 하나입니다. 세마포어는 공유 자원에 대한 접근을 여러 스레드 또는 프로세스가 동시에 시도하는 상황에서, 공유 자원에 대한 접근을 조절하고 동기화하는 기능을 제공합니다.
세마포어는 다음과 같은 특징을 가지고 있습니다.
- 세마포어 값에 따른 접근 권한 부여: 세마포어는 정수 값으로 구성되어 있으며, 이 값은 공유 자원에 대한 접근 권한을 부여하는데 사용됩니다. 세마포어 값이 0인 경우, 공유 자원에 대한 접근이 불가능합니다.
- 락(lock)과 언락(unlock) 연산: 세마포어는 락(lock)과 언락(unlock) 연산을 제공합니다. 락 연산은 세마포어 값이 1 이상이면 값을 1 감소시키고, 0인 경우에는 락을 대기하도록 합니다. 반면 언락 연산은 세마포어 값을 1 증가시킵니다.
- 다양한 세마포어 종류: 세마포어는 바이너리 세마포어와 카운팅 세마포어로 구분됩니다. 바이너리 세마포어는 값이 0 또는 1인 세마포어로, 뮤텍스와 비슷한 기능을 제공합니다. 카운팅 세마포어는 값이 0 이상인 세마포어로, 특정 자원의 개수나 특정 스레드의 허용 가능한 개수 등을 표현하는데 사용됩니다.
세마포어는 공유 자원에 대한 접근을 조절하고 동기화하는 데 사용되며, 대부분의 운영체제에서 지원하고 있습니다. 세마포어는 스레드 또는 프로세스 간의 동기화를 구현하는 데 매우 유용한 기법 중 하나입니다.
'CS' 카테고리의 다른 글
네이티브 코드(Native Code) (0) | 2023.03.09 |
---|---|
뮤텍스(Mutex) (0) | 2023.03.09 |
프로세스(Process) (0) | 2023.03.09 |
스레드(Thread) (0) | 2023.03.09 |
Docker Compose VS Kubernetes (0) | 2023.02.27 |