처음엔, 쓰레드들을 호출하는 main에서
pthread_create한 뒤에, pthread_join을 호출하여 쓰레드 종료시까지 대
기하게 하였습니다.
sleep함수를 pthread_create와 pthread_join사이에 넣어 보았더니 정상실
행이 됩니다. (sleep(60) 이렇게 -_-;;) 즉, pthread_join이 대기하지 않
고 즉시 종료시키는 것 같습
니다. -_-;
혹시, 정훈님이 말씀하신 blocking과 어떤 관련이 있는 것인지, 아니면
쓰레드 함수에 문제가 있는 것인지...
네트웍 프로그램이라 하셨죠?
select(), recv(), send() 등의 함수에서 리턴값이 음수인가를
당연히 체크 하시죠?
시그널을 받으면 위의 함수들은 EINTR를 리턴합니다.
가령 select() 호출 후 blocking 상태에 있는 중에 시그널이 오면
select(), recv(), send() 등은 에러를 리턴하고
errno는 EINTR이 됩니다.
다음처럼 해 보세요
Re: sleep에서 죽어버립니다. -_-;;
그냥 sleep 함수가 잘못돼서 죽지는 않을껍니다..T..T
Re^2: sleep에서 죽어버립니다. -_-;;
쓰레드에선 sleep이 안먹히나요? gdb에서 보니까 먹히는데 아우 T_T;;
정말루 sleep에서 죽어요 T_T;;
네트웍이 아니라 쓰레드입니당^_^;;;
죄송하게도 -_-;;; 수고스럽게 답변까지 잘달아주셨는데...
하지만, 좋은 참고 됐습니다. 몰랐던건데^_^;;
황당하게 됐습니다. -_-
처음엔, 쓰레드들을 호출하는 main에서
pthread_create한 뒤에, pthread_join을 호출하여 쓰레드 종료시까지 대
기하게 하였습니다.
sleep함수를 pthread_create와 pthread_join사이에 넣어 보았더니 정상실
행이 됩니다. (sleep(60) 이렇게 -_-;;) 즉, pthread_join이 대기하지 않
고 즉시 종료시키는 것 같습
니다. -_-;
혹시, 정훈님이 말씀하신 blocking과 어떤 관련이 있는 것인지, 아니면
쓰레드 함수에 문제가 있는 것인지...
해결됐습니다.
해결...--;
너무 어이없어서 말을 못하겠네요 -_-; 답변해주신 분들께 죄송스러워서.
결론을 말하자면...
쓰레드 생성하고 join할때, 쓰레드마다 할당되는 번호, pthread_t값을 하
나만 썼더군요.
ex) 아직도 궁금한건..왜 gdb에선 제대로 돌아갔는지;;;
Re: sleep에서 죽어버립니다. -_-;;
네트웍 프로그램이라 하셨죠?
select(), recv(), send() 등의 함수에서 리턴값이 음수인가를
당연히 체크 하시죠?
시그널을 받으면 위의 함수들은 EINTR를 리턴합니다.
가령 select() 호출 후 blocking 상태에 있는 중에 시그널이 오면
select(), recv(), send() 등은 에러를 리턴하고
errno는 EINTR이 됩니다.
다음처럼 해 보세요
#include
while(1)
{
if(select() < 0)
{
if(errno == EINTR) // 에러아님 (시그널때문이므로)
continue;
else
return 에러;
}
else
break;
}
recv(), send() 등도 마찬가지입니다.
댓글 달기