windows 에서의 thread ![]() ![]()
|
+ 쓰레드에 안전한 C 표준 함수의 호출을 위한 쓰레드 생성
CreateThread 함수 호출을 통해서 생성되는 C/C++ 표준 함수에 대해서 안정적으로 동작하지 않는다.
beginthread 는 쓰레드 생성시 반환되는 핸들을 무효화 시켜서 커널 오브젝트에 접근할 수 있는 방법을 막아 버리는 문제점이 있다.
( 커널 오브젝트에 접근해야 하는 상황은 어떤 상황이 있을까? ... 프로세스간 통신을 제외하고은 음.. )
#include <process.h>
uintptr_t _beginthreadex( void *security,
unsigned stack_size,
unsigned (*start_routine ) ( void*) ,
void *arglist,
unsigned intiflag,
unsigned *thrdaddr )
HANDLE hthread = _beginthreadex( NULL, 0 , ThreadFunc , (void*)¶m, 0 , &threadId );
unsigned WINAPI ThreadFunc(void * arg){}
+ 핸들 , 커널 오브젝트, 그리고 ID 의 관계
- 쓰레드도 운영체제에 의해서 관리되는 리소스 이기 때문에 커널 오브젝트의 생성을 동반
- 따라서 커널 오브젝트를 참조할 수 있도록 핸들이 반환된다.
- 핸들을 이용해서 여러 요청을 할 수 있다 " handle이 가리키는 쓰레드가 종료될때까지 대기"
- 핸들을 통해서 커널 오브젝트의 구분이 가능하고, 커널 오브젝트를 통해서 쓰레드의 구분이 가능하다.
- 쓰레드의 핸들이 쓰레드를 구분하는 용도로 사용된다.
- 핸들의 정수값은 프로세스가 달라지만 중복될수 있다. 그러나 쓰레드의 ID는 프로세스의 영역을 넘어서서 중복되지 않는다.
'SYSTEM PROGRAMMING' 카테고리의 다른 글
윈도우 에서의 쓰레드의 동기화 (0) | 2015.08.05 |
---|---|
커널 오브젝트의 두가지 상태 (0) | 2015.08.05 |
쓰레드의 소멸과 멀티 쓰레드 기반의 다중 접속 서버의 구현 (0) | 2015.08.05 |
쓰레드 동기화 (0) | 2015.08.05 |
쓰레드의 문제점과 임계 영역( Critical Section ) (0) | 2015.08.05 |