Count Semaphore
Semaphore 값이 2 이상인 경우를 Count Semaphore라고 한다. 즉 공유자원의 개수가 다수일 경우를 의미하겠다.
RTOS 환경에서 Count Semaphore를 사용하는 경우는 실질적으로 드물어 보인다.
Count Semaphore 사용용례
큰 메모리를 사용하는 thread들 중 최대 3개까지만 동시 할당이 가능하도록 제한하는 경우,
아래와 같이 하면
♦ huge_memory_therad()는 여러개가 실행이되어도,
♦ heavy_memory_job() 함수는 최대 3개까지만 하용되고 나머지는 Blocking 된다.
“`c
mos_semphr_id_t sem_id;
void init_test() {
sem_id = mos_semphr_new(3);
}
//~~~~
void huge_memory_thread() {
while(1) {
// wait job
wait_job();
mos_semphr_acquire(sem_id, MOS_WAIT_FOREVER);
char *buf = malloc(100 * 1024)
// heavy memory job
heavy_memory_job(buf);
free(buf);
mos_semphr_release(sem_id);
}
}
“`