이번에는 세마포어에 대해서 알아보려고 한다.
추가 설명
[컴퓨터(Computer Science)/운영체제(Operation System)] - 동기화, 세마포 : Synchronization, Semaphores [운영체제]
영어 설명에는
1. They are the key ingredient in solving various producer/consumer problems where a buffer is being read and written at the same time.
2. A semaphore in Win32 may be locked at most n times, where n is specified when the semaphore is created.
이런 말이 있다.
무슨 말인고 허니
버퍼가 읽기와 쓰기를 같이 하려고 할 때의 문제를 해결할 수 있다는 말과
-> 상호배제원리
기껏해야 n번만 lock이 걸린다는 얘기를 한다.
-> 세마포어의 특징
그래도 모르겠는데???
예를 들어보자
- 차를 빌리는 문제
(convertible = resource, 고객= resource를 원하는 thread)
???
그렇다면 어떤 해결방법이 있을까
그래도 모르겠지...?
그렇다면 세마포어를 만드는 메서드가 어떻게 생긴지 보고 다시 생각해보자
여기서 InitialCount와 MaximumCount에 주목하자.
위의 문제에서는 결국 MaximumCount = 3이었고 InitialCount = 3이 된다.
이제야 이해가 가나??
이제 그럼 진행되는 방식을 볼까??
먼저 Lock을 걸 때
세마포어의 값이 현재 내가 쓸 수 있는 공유자원의 수가 되겠다. (보통 S로 표현된다).
세마포어의 특징때문에 여러 개의 스레드가 동시에 lock을 걸 수 있다. (S=S-1)
다음으로 Release를 할 때
이것 또한 꼭 Release를 시켜줘야 한다.
그렇게 되면 우리가 사용할 수 있는 세마포어의 수가 늘어난다 S=S+1
마지막으로 세마포어에 왜 굳이 Maximum만 있으면 될 것 같은데 초기 값은 왜 주어지느냐??
초기 값이 바로 세마포어의 수가 되고 Maximum 까지 늘어날 수 있다.
(만약 초기값이 주어지지 않는다면 항상 S=0부터 시작하겠지...)
'컴퓨터(Computer Science) > 시스템 프로그래밍(System Programming)' 카테고리의 다른 글
뮤텍스,Mutex (Mutual Exclusion) 쓰임과 예시 (0) | 2020.12.09 |
---|---|
멀티스레드 환경에서의 동기화(Synchronization) (0) | 2020.12.09 |
시스템 프로그래밍을 위한 기본 OS 지식 (0) | 2020.12.08 |
시스템 프로그래밍을 배우는 이유 (7) | 2020.12.08 |