구글 코드 검색을 시도합니다. 이 구조는 스레드를 "작동"시키는 데 필요한 모든 데이터 조각으로 채워질 수 있습니다.
예를 들어 데이터 구조의 루트는 해당 스레드의 스레드 고유 키에 액세스하고 해당 스레드를 종료 할 때이를 정리하기 위해 반복해야합니다.
일반적으로 해당 구조에는 뮤텍스와 유사한 잠금이 있고 다른 섹션에는 둘 이상의 잠금이 있습니다.
스레드 컨텍스트에는 종료 스레드가 종료 상태를 지정할 수있는 작은 필드가있을 수 있습니다. (void *
은 pthread_exit
에 의해 반환되거나 스레드 함수에서 반환 됨)
스레드 컨텍스트는 스레드의 상태 (아직 생성되지 않고 실행 중, 중지됨)를 나타낼 수도 있습니다.
조건 변수 또는 세마포어와 같은 동기화 프리미티브가있을 수 있으며 스레드는 종료 상태를 준비하고 종료 상태임을 나타내는 후 kick
이 될 수 있습니다.
pthread_join
함수는 해당 동기화 프리미티브에서 대기 할 수 있습니다. 대기가 완료되면 함수는 상태를 해제하는 것 외에도 해당 스레드에 대한 자원 정리를 트리거 할 수 있습니다.
스레드는 조인 신호를 보낸 후에도 계속 실행됩니다. 이를 위해서는 계속해서 스택이있는 컨텍스트가 있어야합니다. 그런 다음 시스템은 백그라운드에서 스레드를 완전히 멈추는 문제를 해결해야합니다.
스레딩의 사용자 공간 구현은 커널에이를 지연시킬 수 있습니다. 예 : 어떤 신호는 꺼지거나 스레드가 완료되었음을 나타내는 어떤 신호가 될 수 있습니다. 이 시점에서 사용자 공간은 스레드가 더 이상 스택을 사용할 수 없다는 것을 알고 재활용 할 수 있습니다.
커널에서 스케줄러는 스레드를 "먹을"수 있습니다.스레드는 대부분의 자원을 정리 한 후에 절대로 리턴하지 않는 스케줄러에서 일부 함수를 호출 할 수 있습니다. 스레드를 죽은 것으로 표시하고 컨텍스트를 다른 스레드로 전환합니다. 쓰레드의 스택은 다시는 사용되지 않을 것이고 (그 함수는 결코 반환되지 않기 때문에), 작업 구조와 그것에 붙어있는 나머지 것들뿐만 아니라, 재사용 될 수있다.
출처
2012-03-22 03:11:10
Kaz
코드와 실제 코드 사이의 유일한 큰 차이점은 코드가 여분의 코어가있을 경우 코드가 연결 스레드가 CPU의 100 %를 소모하게한다는 것입니다. –