컴퓨터(Computer Science)/시스템 프로그래밍(System Programming)

세마포어,Semaphores 그 쓰임과 예시

게임이 더 좋아 2020. 12. 9. 01:32
반응형
728x170

 

이번에는 세마포어에 대해서 알아보려고 한다.

추가 설명

[컴퓨터(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부터 시작하겠지...)

반응형
그리드형