2011-02-24 10 views

답변

14

리눅스의 pthread 라이브러리에는, 내가 아는 한, 쓰레드 핸들의 개념이 없습니다. pthread_create 및 기타 pthreads 함수는 스레드 ID를 반환합니다.

Windows에서 스레드 핸들은 파일 핸들이 파일 이름과 다른 것과 같은 방식으로 스레드 ID와 다릅니다.

스레드 핸들은 스레드로 무언가를 할 수있는 토큰입니다 (일반적으로 스레드를 기다리거나 죽이기). Win32는 많은 객체에 대해 이러한 토큰을 가지고 있으며 일반적으로 핸들을 호출합니다.

토큰은 본질적으로 실행중인 (또는 중지 된) 스레드의 포인터이며 이와 관련된 일련의 기능을 가지고 있습니다. 예를 들어 스레드를 기다리지 만 죽이지는 않는 핸들을 가질 수 있습니다. 같은 방법으로 우리는 읽기 전용 파일 핸들을 가질 수 있습니다.

이 수준의 간접 참조는 유용 할 수도 있지만 유용하지 않을 수도 있지만 Win32에서 사용하는 방법이며 다른 유형의 개체를 처리하는 방법과 광범위하게 일치합니다.

2

스레드 ID는 순차적 (즉, 순차적)이며 트래버스 할 수 있습니다. Windows에서 대부분의 핸들과 마찬가지로 스레드 핸들은 실제로 포인터입니다. 예를 들어 스레드 핸들을 사용하여 스레드 속성 비트를 설정할 수 있지만 스레드 ID는 설정할 수 없습니다.

4

ID는 시스템에서 실행중인 스레드의 고유 한 숫자 ID입니다. 커널 객체 핸들과 마찬가지로 스레드 핸들은 커널 객체에 대한 참조 카운트 된 포인터의 특별한 유형으로 볼 수 있습니다.

는 SO 커널 공간에서 ID와 형 스레드의 객체가 = 12345

그리고 당신은 당신이 가치가있는 threadID라는 주소 공간에 대한 포인터를 스레드로 뭔가를 원하기 때문에 44

동일한 커널 오브젝트에 대한 다른 핸들은 다른 값 (하나의 오브젝트에 대한 포인터 2 개)을 가지며 커널 오브젝트는 둘 이상의 프로세스에서 핸들을 가질 수 있습니다.