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
[38630] Re:Re:Re:임계영역문제==>답변 감사합니다.
라스코니 [chouoo] 1122 읽음    2005-01-04 17:07
: 저는 원래 크리티컬 섹션은 아예 진입이 안되는줄 알았거든요

음, 뭔가 혼동을 하신 듯 하네요. 진입이 선점(preemption)을 말하는 것인가요?

앞부분에서 재진입에 대해서 상세히 말씀을 드리지 않았는데...

재진입은 다음과 같은 경우에서,

void func();

thread A()
{
    func();
}

thread B()
{
    func();
}

쓰레드 A가 먼저 수행되고 그 후에 쓰레드 B가 쓰레드 A를 선점(Preemption)했다고 가정했을 때 쓰레드 B가 종료된 후 쓰레드 A가 중단됬던 작업을 끝마쳤을 때에 func() 이 제대로 된 결과를 내었느냐 그렇지 않느냐를 따지는 것입니다.

대부분의 경우 함수와 임계영역과의 관계는 아래와 같이 가정하는 것이 편합니다.

func()
{
   ....
   critical section code
   ....
}

임계 영역도 구성에 따라서 선점, 비선점 될수도 있구요 각각의 특징이 있습니다.

만약 위의 예에서 func()가 임계 영역을 가지고 있다면 상황이 복잡해지죠. 쓰레드 A가 쓰레드 B에 의해서 선점당할 때 임계 영역에 있었느냐 아니냐에 따라서 양상이 매우 달라지게 됩니다. 만약 임계 영역에 있었다면 쓰레드 B는 쓰레드 A가 임계 영역을 빠져나올 때까지 block 되어야 하죠. 물론 임계 영역에서도 선점이 가능하도록 되어 있을 때입니다.

+ -

관련 글 리스트
38615 임계영역문제 김상면 1280 2005/01/03
38616     Re:임계영역문제 라스코니 1893 2005/01/04
38621         Re:Re:임계영역문제==>답변 감사합니다. 김상면 1155 2005/01/04
38630             Re:Re:Re:임계영역문제==>답변 감사합니다. 라스코니 1122 2005/01/04
38636                 Re:Re:Re:Re:임계영역문제==>답변 감사합니다. 김상면 896 2005/01/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.