[완료]리눅스 초짜입니다 pthread 관련해서 질문 좀 드릴께요 ㅜ
글쓴이: 1lee123 / 작성시간: 월, 2011/11/07 - 5:58오후
제가 사수로부터 분석을 지시 받은 코드를 가지고 별도의 테스트코드를 작성 중에 있습니다
분석 중인 코드에서 main을 보면
while(1)
{
pthread_create(&threadID..);
pthread_detach(threadID);
sleep(2);
}
이렇게 되어 있습니다
도대체 저 코드가 이해가 안가네요;;;
제가 알기로는 pthread_create 후에 pthread_join이 호출되는것이 당연하다고 생각했는데;;;
위의 코드가 무슨 의미일까요? ㅜㅜ
그리고 저렇게 되면 pthread_create인자중 함수포인터가 넘어가는데 해당 함수가 정상 동작 후 종료가 되는걸까요???
Forums:
https://computing.llnl.gov/tu
https://computing.llnl.gov/tutorials/pthreads/#Joining
Detaching:
The pthread_detach() routine can be used to explicitly detach a thread even though it was created as joinable.
There is no converse routine.
http://linux.die.net/man/3/pthread_detach
리눅스 기반에서의 쓰레드를 종료하는 데에는 pthread_join() 이나 pthread_detach() 중 어느 하나는 반드시 호출해야 한다.(물론 쓰레드를 생성할 때 detached 로 생성하는 경우는 예외가 될 것 같다. 이미 detached 이므로..)
정리를 깔끔하게 하지는 못했습니다. 저두 잘 아는 것이 아니라서요..
//////////////////////////////////////////////////////////////////////////////
>> 위의 코드가 무슨 의미일까요? ㅜㅜ
쓰레드 하나를 만들고 그 쓰레드를 분리를 시킨 것이네요. 쓰레드를 분리한다는 것의 의미는 해당 쓰레드의 리턴값 혹은 pthred_exit() 의 인자값을 아무도 확인하지 않아도 되도록 한다는 것 같아요. 자신은 없네요....
>> 그리고 저렇게 되면 pthread_create인자중 함수포인터가 넘어가는데 해당 함수가 정상 동작 후 종료가 되는걸까요???
네 그렇죠. 그리고 분리가 된 쓰레드 이므로 아무도 그 쓰레드의 종료값(리턴값 혹은 pthread_exit() 인자값)을 확인하려하지 않죠. 마치 홀로 생을 마감한 노숙자에 아무도 관심 없는 것 처럼... 쓸쓸하군요..
//////////////////////////////////////////////////////////////////////////////
표시한 부분은 부정확한 정보임을 밝힙니다.
Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.
어익후 답변 감사합니다. 그런데 한가지만 더 질문을 ㅜ
저 정도 댓글 달아주신것만 해도 큰 도움이 되었습니다
감사합니다^^
그런데 만약 pthread_detach 호출로 부모스레드(?)가 pthread_create로 생성된 자식스레드(?)를 신경 안쓴다는 의미로 본다면 sleep이 코드가 없어도 자식스레드에 등록된 함수도 정상동작 후 종료되야되는것이 아닌가요?? ㅜ
그런데 위의 코드에서 sleep이 없으면 pthread_create의 인자에 등록되는 함수가 아예 호출이 안되고 그냥 종료되는듯 싶습니다
저런식으로 하려면 sleep을 반드시 넣어줘야 하는건가요?? ㅜ
제가 잘못 생각하고 있었네요;;;
제가 원래 테스트한 코드는
int i = 0;
while(i < 3)
{
i++;
pthread_create(&threadID..);
pthread_detach(threadID);
}
이거였습니다
그랬더니 pthread_create함수의 인자로 넘겨주는 함수가 모든 부분을 수행하지 못하고 종료되는데 그 이유가 스레드가 모든 부분을 수행하기 전에 main 자체가 종료가 되서 일어난 일이더군요
pthread_detach 대신 pthread_join을 하면 스레드가 끝날때까지 블러킹이 되서 상관이 없었는데 제가 헷갈렸네요
답변 감사드려요^^
댓글 달기