◆ 무한한 가능성/& Visual C/C++

Thread in C runtime library (다중스레드, Multi-Thread)

치로로 2009. 8. 19. 16:30

<<Thread in C runtime library>>


▷ _tiddata
 : 다중 스레드에서의 C runtime library 문제점을 해소하려면,
이와 같은 전역변수, 정적변수들을 스레드당 별도로 생성하여 관리해야 한다.
이러한 데이터들을 모아놓은 것이 구조체 _tiddata 이다.

▶ 다중 스레드(/MT) - LIBCMT.LIB
▶ 다중 스레드 디버그(/MTd) - LIBCMTD.LIB
▶ 다중 스레드 DLL(/MD) - MSVCRt.LIB
▶ 다중 스레드(/MDd) - MSVCRtD.LIB



*스레드 생성

** _beginthread

unsigned long _beginthread(
  void(__cdecl * start_address)(void*),
  unsigned stack_size,
  void *arglist
);
// start_address
 : 생설될 스레드가 실행할 루틴의 시작주소, 함수 호출 규약은 __cdecl
// stack_size
 : 생성될 스레드가 사용할 스택의 크기, '0'이면 기본 크기


** _beginthreadex

unsigned long _beginthreadex(
  void *security,
  unsigned stack_size,
  unsigned (__stdcall *start_address)(void *),
  void *arglist
  unsigned initflag,
  unsigned *thrdaddr
);
// security
 : 생설될 스레드의 보안속성
// stack_size
 : 생성될 스레드가 사용할 스택의 크기, '0'이면 기본 크기
// start_address

 : 생설될 스레드가 실행할 루틴의 시작주소, 함수 호출 규약은 __stdcall
// arglist
 : 생설될 스레드가 실행할 실행 루틴에게 전달될 매개변수 리스트, 여러 개 전달가능
// initflag
 : 스레드 커널 오브젝트가 함수를 실행할 때 적용되는 플래그
 : NULL(0)일 경우, 스레드 커널 오브젝트 생성과 동시에 함수 실행, CREATE_SUSPENDED 시 대기
// thrdaddr
 : CreateThread에서의 lpThreadId와 같음




*스레드 종료
: _beginthread / _beginthreadex는 스레드를 생성하기 전에 _tiddata를 사용하기 위한 메모리 영역을 할당하기 때문에, 스레드를 종료할 때 반드시 해제 과정을 거쳐야함
(즉, ExitThread / return 을 하지 않고, _endthread / _endthreadex를 사용)

** _endthread
void _endthread( void );

** _endthreadex
void _endthreadex( unsigned retval );   // 종료 코드



'◆ 무한한 가능성 > & Visual C/C++' 카테고리의 다른 글

Thread - C 런타임 함수와 WIN32 API  (0) 2009.08.19
Thread in C runtime library> example code. - Thread04  (0) 2009.08.19
Thread example code. - Thread03  (0) 2009.08.19
Thread  (0) 2009.08.19
Kernel Object  (0) 2009.08.17