[운영체제] 생산자 소비자 문제
- 최초 등록일
- 2012.05.27
- 최종 저작일
- 2012.04
- 5페이지/ 한컴오피스
- 가격 1,000원
소개글
운영체제
Semaphore를 이용한 생산자, 소비자 문제 프로그램 설명
- 기능
생산자 함수는 원형버퍼가 가득 찰 때까지 버퍼를 채운다. 소비자 함수는 원형버퍼가 빌 때 까지 계속해서 버퍼에서 데이터를 가져온다(생산자 함수는 버퍼가 가득 찼으면 대기, 소비자 함수는 버퍼가 비어있을 때 대기한다). 만약 생산자 함수에서 버퍼에 데이터를 채우고 있는데 소비자 함수로 문맥 교환이 이루어지면 이미 mutex 세마포어가 0이기 때문에 소비자 함수는 대기하게 된다. 생산자 함수가 모든 작업을 다 끝내고 나와야 signal(mutex)로 인해 mutex가 1이 되기 때문에 상호 배제를 만족 시킨다.
목차
1. 소스
2. 실행 및 결과
본문내용
/* 생산자 쓰래드 */
void *producer(void *param) {
buffer_item item;
while(TRUE) {
int rNum = rand() / RAND_DIVISOR;
sleep(rNum);
/* 임의의 숫자를 생성한다 */
item = rand();
/* acquire the empty lock */
sem_wait(&empty);
/* acquire the mutex lock */
pthread_mutex_lock(&mutex);
if(insert_item(item)) {
fprintf(stderr, " Producer report error conditionn");
}
else {
printf("producer produced %dn", item);
}
/* release the mutex lock */
pthread_mutex_unlock(&mutex);
/* signal full */
sem_post(&full);
}
}
/* 소비자 쓰래드 */
void *consumer(void *param) {
buffer_item item;
while(TRUE) {
/* sleep for a random period of time */
int rNum = rand() / RAND_DIVISOR;
sleep(rNum);
/* aquire the full lock */
sem_wait(&full);
/* aquire the mutex lock */
pthread_mutex_lock(&mutex);
if(remove_item(&item)) {
fprintf(stderr, "Consumer report error conditionn");
}
참고 자료
없음