[완료] 쓰레드가 종료되었는지 알아내기
글쓴이: mips / 작성시간: 금, 2008/05/09 - 10:40오전
쓰레드를 일정 갯수만큼 생성해서 각 쓰레드가 동시에 다른 파일을 받아오는 작업을 하고
전송이 끝난 쓰레드는 종료하는 형태입니다.
그런데, 항상 쓰레드 갯수를 일정하게 유지하려고 하는데 쓰레드를 생성하는
함수에서 pthread_join으로 쓰레드 종료 여부를 검사하려고 했더니
순차적으로 진행하는 문제가 있습니다.
예를 들어, 1,2,3 쓰레드가 있을 때 2번 쓰레드가 먼저 종료된 경우라고 하더라도
for (i = 0 ; i < 3; i++ ) { pthread_join(th[i], NULL); }
이런식으로 검사하게 되면, 항상 1번 쓰레드가 종료되는 걸 확인하고 나서 2번으로 넘어가네요.
쓰레드를 여러개 생성했을 때 어떤식으로 특정 쓰레드가 종료되었는지 알 수 있을까요?
Forums:
이 문제는 지금은
이 문제는 지금은 고인이 되신 스티븐씨도 탄식을 하신 문제입니다.
도대체 왜 임의의 쓰레드가 종료되었을 때 확인할 수 있는 API가 없냐구요..
다른 방법으로 pthread_kill()을 이용해서 능동적으로 검사를 하시거나,
직접 창안을 하시는 것이 좋을 것 같습니다.
표준안이라는게 잘못정해지면 나머지가 고생한다는...
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
그렇군요.
단순하게 pthread_join으로는 안 된다는 사실을 안 것 만으로도 도움이 되었습니다.
고맙습니다.
pthread_cleanup_push(),
pthread_cleanup_push(), pthread_cleanup_pop() 로 exit 핸들러 구성해서 thread 상태를 저장하는 변수에 접근하고.
pthread_testcancel() 로 꾸준히 체크해주고.
필요하면 pthread_cancel() 로 죽여버리고.
OTL
댓글 달기