운영체제 Synchronization(C,Java 소스코드 및 설명 포함)
- 최초 등록일
- 2014.01.16
- 최종 저작일
- 2010.05
- 18페이지/ 한컴오피스
- 가격 1,500원
목차
1. Pthread 라이브러리 사용(semaphore, mutex 사용)
2. Pthread 라이브러리 사용(condition variable, mutex 사용)
3. Java synchronization 기능 사용(signal, notify 사용)
4. Java Semaphore 기능 사용
본문내용
2)소스코드 주요부분 코멘트
sem_init() : 세마포를 초기화 하는 함수로 첫 번째 인자는 세마포의 주소가 오고, 두 번째 인자에는 0 또는 0이 아닌 수가 올 수 있다. 0인 경우는 스레드끼리 세마포를 공유하겠단 것이고, non-zero인 경우는 프로세스간 세마포를 공유하겠다는 뜻이다. 마지막 세 번째 인자는 unsigned int 값이 올 수 있다.
pthread_create() : 스레드를 생성하는 함수이고, 첫 인자는 스레드의 주소, 두 번째 인자는 스레드의 특징을 결정짓는데 보통 NULL을 준다. 세 번째는 스레드가 실행할 루틴이 들어가고, 마지막 인자는 3번째 인자에서 호출되는 하수에 전달하고자 하는 값을 넣어줄 수 있다. 이번 코드에서는 bounded buffer를 이용하므로 버퍼의 시작주소를 넘겨주었다. 그리고 실행루틴으론 생산자-소비자 problem 이므로 producer, consumer 실행루틴을 넣어주었다.
<중 략>
기존에 주어진 소스코드에서 empty, full, mutex 세마포가 추가된다. 세마포 empty는 버퍼의 용량 n으로 초기화 해주므로, 여기서는 define되어 있는 BUFSIZE 로 했다. full은 0으로 초기화했다. mutex 세마포는 버퍼 풀에 대하여 상보 배제 접근 기능을 제공하며 1로 초기화했다. 변수 count는 출력 메시지를 위해 버퍼가 비어있는지 꽉 차있는 지를 나타내는 목적에만 사용했다.
또, 기본소스와 다른 것은 실제로 버퍼에 msg를 쓰고 꺼내는 작업을 하는 putmsg()와 getmsg()의 while문 대신 세마포를 써서 synchronization을 구현한 점이다. 두 함수에서 bounded buffer를 공유하는 부분을 P와 V오퍼레이션에 해당하는 sem_wait과 sem_post로 감싸주어서 크리티컬 섹션을 만들어주었는데, 이 부분이 실행될 때 다른 프로세스나 스레드가 끼어들지 못하게 하는 역할을 한다. 그래서 mutual exclusion이 보장된다.
참고 자료
없음