일단 구한말 운영체제인 DOS를 제외하고는 인터럽트를 사용자 프로그램수준에서
제어할 수 없습니다.
유닉스에서는 시그널이 님의 글에서의 인터럽트입니다. 시그널이란 용어를
사용하시기를 권고합니다.
* 모든 유닉스 시스템 호출(system call)은 blocking모드와 non-blocking
mode로 동작하는 것으로 분류할 수 있습니다. 이때, sleep()은 기본적으로
blocking입니다. 탈출조건은 signal을 받거나, sleep()에 인자로 준 값(초단위시간)이
expire된 경우입니다.
님의 말씀중에 쓰레드내에서 발생된 인터럽트라는 말은 이해하기 모호합니다.
시그널이 발생했다는 것인데, 그 시그널이 누구에의해 발생하는가를 추적하는게
옳고 그에 대한 핸들링을 쓰레드를 사용하는 경우 어떻게 하는가를 보는게
옳은 접근으로 간주됩니다.
제가 보기에 문제 분석이 다소 잘못되지 않았나 우려됩니다.
차라리 님의 소스를 올려 검토 받는게 좋은 방법인듯 합니다.
kldp의 많은 분들이 한글보다도 때로는 코드로 대화하는게 의사소통이
원할한 경우가 많은 것 같아서요. :o
Re: 쓰레드가 프로세스로 인터럽트 안주기
일단 구한말 운영체제인 DOS를 제외하고는 인터럽트를 사용자 프로그램수준에서
제어할 수 없습니다.
유닉스에서는 시그널이 님의 글에서의 인터럽트입니다. 시그널이란 용어를
사용하시기를 권고합니다.
* 모든 유닉스 시스템 호출(system call)은 blocking모드와 non-blocking
mode로 동작하는 것으로 분류할 수 있습니다. 이때, sleep()은 기본적으로
blocking입니다. 탈출조건은 signal을 받거나, sleep()에 인자로 준 값(초단위시간)이
expire된 경우입니다.
님의 말씀중에 쓰레드내에서 발생된 인터럽트라는 말은 이해하기 모호합니다.
시그널이 발생했다는 것인데, 그 시그널이 누구에의해 발생하는가를 추적하는게
옳고 그에 대한 핸들링을 쓰레드를 사용하는 경우 어떻게 하는가를 보는게
옳은 접근으로 간주됩니다.
제가 보기에 문제 분석이 다소 잘못되지 않았나 우려됩니다.
차라리 님의 소스를 올려 검토 받는게 좋은 방법인듯 합니다.
kldp의 많은 분들이 한글보다도 때로는 코드로 대화하는게 의사소통이
원할한 경우가 많은 것 같아서요. :o
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
좀더 자세히..
더 분석을 해보니 db_disconnect()를 빼면 정상
문제 코드 : SQL COMMIT WORK RELEASE;
SQL COMMIT WORK RELEASE 만 하면 그 다음 system call시 프로세스에 select()에 EINTR이 잡힘..
대안이 없을까요?[/code]
Re: 좀더 자세히..
아마도 db서버에 연결했다가 연결 단절시에 발생하는 SIGPIPE 시그널을 수신해서
그러한것 같습니다.
이 경우에 문제(에러)가 발생한 것은 아니고요. 지극히 정상입니다.
이런 식으로 코드를 바꾸시고 사용하세요.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
그렇게는 이미 해쬬!
그렇게는 이미 했죠!
쓰레드에 시스템 콜이 프로세스로 넘어간다는게 문제지요!
쓰레드가 1000개 있으면 1000번 이 넘어가서 EINTR이 걸리겠지요!
댓글 달기