안녕하세요 꼬로미입니다
쓰레드 동기화 세마포어에 대한 프로그래밍 입니다
리눅스 기반으로 작성했습니다 ^^*
세마포어(Semaphore)
0과 1만을 사용하는 세마포어 ( 0이면 대기, 1ㅇ디면 접근가능)
뮤텍스의 lock과 unlcok에 해당하는 post, wait 함수를 사용한 임계영역
하나의 Dead Lock을 회피하는 기법
동기화 대상이 여럿일 경우에 사용(화장실이 여러칸있다고 생각)
세마포어 예제(리눅스)
세마포어 2개 생성
sem_init(&sem_one, 0, 0);
sem_init(&sem_one, 0, 1);
세마포어 변수 sem_two를 이용한 wait와 post 함수 호출
sem_wait(&sem_two);
sem_post(&sem_two);
* 뮤텍스(Mutex) 방식의 lock, unlock에 해당하는 함수
* read 함수를 호출하는 쓰레드가 새로운 값을 가져다 놓기 전 accu 함수가 값을 가져가 버리는 상황을 막기 위해 사용
sem_init : 생성
sem_wait : 1 감소, 초기값이 1일때 세마포어 값을 0으로
sem_post : 1 증가, wait 다음 호출되어 세마포어 값을 1으로
이런 특징으로 임계영역을 동기화시킴
실행결과
1,2,3,4,5의 값을 입력하여 15의 결과값을 얻었고
5,5,6,7,7의 값을 입력하여 30의 결과값을 얻어본 결과입니다
^^*
'Study > Programming' 카테고리의 다른 글
윈도우 기반의 쓰레드 생성 - 꼬로미 (0) | 2014.06.05 |
---|---|
안드로이드 리소스와 보안 (0) | 2014.06.04 |
쓰레드 동기화 뮤텍스(Mutex) (0) | 2014.06.02 |
안드로이드 액티비티와 인텐트 (0) | 2014.05.30 |
워커(Worker) 쓰레드 모델 (0) | 2014.05.28 |