C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[50545] 운영체제에서 Producer-Consumer 문제에 관한 질문입니다. 이론적인 질문입니다.
박진우 [mr0sky] 1898 읽음    2007-09-13 00:49
#define BUFFER_SIZE 10

Typedefstruct {

.........

} item;

item buffer[BUFFER_SIZE];

intin = 0;

intout = 0;

여기서,in, out은0으로초기화된다. 버퍼들의공유저장소는두개의논리적인포인터인in과out를가진순환배열로구현된다. 변수in은버퍼내에서다음비어있는위치를, out는버퍼내에서첫번째차있는위치를가르킨다. In==out일때, 저장소는비어있는상태이며. ((In+1)%BUFFER_SIZE) == out이면퍼버(저장소)는가득차있는상태이다.

•생산자코드는nextProduced라는지역변수(local variable)에다음번생산되는item을저장하고있다.

item nextProduced;

while (1) {

/* produce an item in nextProduced*/

while (((in + 1) % BUFFER_SIZE) == out); /* do nothing */

buffer[in] = nextProduced;

in = (in + 1) % BUFFER_SIZE;

}

•소비자코드는nextConsumed라는지역변수에다음번소비될item을저장하고있다.

item nextConsumed;

while (1) {

while (in == out) ; /* do nothing */

nextConsumed= buffer[out];

out = (out + 1) % BUFFER_SIZE;

/* consume the item in nextConsumed*/ }

}

 

이방법은BUFFER_SIZE-1 까지만을버퍼에수용할수있다. 버퍼에최대BUFFER_SIZE개까지넣을수있는방법은추후에논한다.

 



위의 내용이구요 질문은 두가지입니다. 답변 부탁드려요!





질문1.Producer가 생성하지 않은 데이터를 Consumer가 꺼내갈수 있는가? 혹은 Consumer가 꺼내간 데이터가 Producer가 생성하지 않은 데이터일수 있는가? 그이유는 무엇인가?



질문2.여기서 N-1개의 슬롯이 사용가능하다 N개의 슬롯이 아닌 N-1개의 슬롯이 사용 가능한 이유는 무엇인가?





이 두가지 질문입니다. 정확한 답변 부탁드립니다.

+ -

관련 글 리스트
50545 운영체제에서 Producer-Consumer 문제에 관한 질문입니다. 이론적인 질문입니다. 박진우 1898 2007/09/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.