당황하는 질문 : 스레드 ID와 스레드 핸들의 차이점은 무엇입니까? 왜 둘 다 필요합니까? Windows와 Linux의 차이점은 무엇입니까?스레드 ID 대 스레드 핸들
답변
리눅스의 pthread 라이브러리에는, 내가 아는 한, 쓰레드 핸들의 개념이 없습니다. pthread_create 및 기타 pthreads 함수는 스레드 ID를 반환합니다.
Windows에서 스레드 핸들은 파일 핸들이 파일 이름과 다른 것과 같은 방식으로 스레드 ID와 다릅니다.
스레드 핸들은 스레드로 무언가를 할 수있는 토큰입니다 (일반적으로 스레드를 기다리거나 죽이기). Win32는 많은 객체에 대해 이러한 토큰을 가지고 있으며 일반적으로 핸들을 호출합니다.
토큰은 본질적으로 실행중인 (또는 중지 된) 스레드의 포인터이며 이와 관련된 일련의 기능을 가지고 있습니다. 예를 들어 스레드를 기다리지 만 죽이지는 않는 핸들을 가질 수 있습니다. 같은 방법으로 우리는 읽기 전용 파일 핸들을 가질 수 있습니다.
이 수준의 간접 참조는 유용 할 수도 있지만 유용하지 않을 수도 있지만 Win32에서 사용하는 방법이며 다른 유형의 개체를 처리하는 방법과 광범위하게 일치합니다.
스레드 ID는 순차적 (즉, 순차적)이며 트래버스 할 수 있습니다. Windows에서 대부분의 핸들과 마찬가지로 스레드 핸들은 실제로 포인터입니다. 예를 들어 스레드 핸들을 사용하여 스레드 속성 비트를 설정할 수 있지만 스레드 ID는 설정할 수 없습니다.
ID는 시스템에서 실행중인 스레드의 고유 한 숫자 ID입니다. 커널 객체 핸들과 마찬가지로 스레드 핸들은 커널 객체에 대한 참조 카운트 된 포인터의 특별한 유형으로 볼 수 있습니다.
는 SO 커널 공간에서 ID와 형 스레드의 객체가 = 12345
그리고 당신은 당신이 가치가있는 threadID라는 주소 공간에 대한 포인터를 스레드로 뭔가를 원하기 때문에 44
동일한 커널 오브젝트에 대한 다른 핸들은 다른 값 (하나의 오브젝트에 대한 포인터 2 개)을 가지며 커널 오브젝트는 둘 이상의 프로세스에서 핸들을 가질 수 있습니다.
- 1. 스레드 ID 스레드 이름에서
- 2. 하드웨어 스레드 대 부드러운 스레드?
- 3. 여러 스레드 대 단일 스레드
- 4. 스레드 풀 대 스레드 산란
- 5. 배경 스레드 대 UI 스레드
- 6. 관리되는 스레드 ID에서 windows 스레드 ID
- 7. Tinythread ++ : 스레드 ID 받기
- 8. 스레드 변경 세션 ID
- 9. 응용 프로그램 스레드 대 서비스 스레드
- 10. 문자 당 스레드 대 맵당 스레드 디자인
- 11. 멀티 스레드 대 Asp.net 3.5 싱글 스레드
- 12. 데카 프 스레드 대 부스트 스레드 대 omnithreads
- 13. 처리기 대 스레드
- 14. QTimer 대 개별 스레드
- 15. 커널 스레드 대 타이머
- 16. 스레드 대 코어
- 17. 스레드 대 스레딩
- 18. 스레드 대 .NET의 프로세스
- 19. Linux 대 Solaris의 스레드 성능
- 20. 스레드 간 이벤트 핸들 사용 - C++
- 21. 메인 애플리케이션의 스레드 ID 받기
- 22. java.util.concurrent 대 부스트 스레드 라이브러리
- 23. 외부 스레드 처리 메서드에서 스레드 풀 스레드의 스레드 ID 가져 오기
- 24. 스레드 스레딩 스레드 제어
- 25. 스레드 풀의 스레드
- 26. 스레드 및 스레드 스타트
- 27. 스레드
- 28. 스레드
- 29. 스레드
- 30. 스레드