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
[12706] Re:[질문] CriticalSection 에 대해서...
gongnim [gongnim] 964 읽음    2001-11-15 18:24
CriticalSection 은 다중 쓰레드를 사용할 때 어떤 메모리의 충돌을 일으키거나 오작동을 하지 않도록 할때
많이 쓰입니다.
한 예로, 1~4번까지의 쓰레드가 있는데, 각기 작동을 하고 있습니다.
전역변수로 int i가 설정돼있는데 네개의 쓰레드가 모두 이 변수를 사용하고 변형시킨다면, 먼저 실행돼는 쓰레드에서 이 변수를 변형시키거나 사용하겠죠? 그럼 이상한현상이 발생할 수 있습니다.
따라서, 이러한 이상한 현상을 막기 위해서 CriticalSection 을 사용하는데, 이것은 임계영역이라고 해서,
이 영역으로 들어오면 이것이 최우선순위로 연산을 하게됍니다. 그렇기때문에 다른 쓰레드는 멈추게돼죠.
그래서 어떤 연산이든지 이 영역으로 오게돼면 다른 쓰레드는 잠시 멈추게돼고 임계영역부터 연산을 해주고, 연산이 끝나서 임계영역을 벗어나게돼면 다시 모든 쓰레드가 동작하게됍니다.
한마디로 하면 CriticalSection은 CPU가 가장 먼저해야할 것을 지정해주는것이라 생각하면 됍니다.
님께서 원하시는 역할을 하지는 않습니다.
님같은 경우에는 쓰레드가 정확하게 멈추어있는건지 쓰레드를 종료시킨것인지를 확인하는게 우선이 아닌가 싶네요. 만약 종료가 아닌 WaitForSingleObject(또는 WaitForMultipleObjects) 같은 함수를 쓰신것인지 확인을 해보세요. 여기서 interval parameter를 INFINITE로 설정하셨다면 time out 시간을 설정해주시면 됩니다.
잘못하면 프로세서가 멈추는 경우가 생기거든요.
그럼 참고하세요


^*^ 님이 쓰신 글 :
: 자동화 관련 프로그램을 짜고 있는데 질문 하나 할려구요.
: 4개의 다른동작을 동시에 하는 쓰레드 4개를 생성했는데...
: 만약 4개중 한쪽쓰레드가 동작하다 멈추는 현상이  발생한다면
: CriticalSection 을 쓰면 해결할수 있는지요.
: 책은 보고 있는데 CriticalSection 을 정확히 어떻게 사용하는지는 잘 모르겠습니다.
: 혹시 써 보신분은 좀 가르쳐 주시면 안되는지....
:

+ -

관련 글 리스트
12702 [질문] CriticalSection 에 대해서... ^*^ 795 2001/11/15
12706     Re:[질문] CriticalSection 에 대해서... gongnim 964 2001/11/15
12707         Re:Re:[질문] CriticalSection 에 대해서... ^*^ 1034 2001/11/15
12766             Re:Re:Re:[질문] CriticalSection 에 대해서... 이경문 1143 2001/11/17
12703     Re:[질문] CriticalSection 에 대해서... 815 2001/11/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.