RTS를 이용한 쓰레드풀
RTS를 이용해서 쓰레드풀을 구성하려고 하고 있습니다.
MAIN에서 이벤트 발생을 체크하고, 여유 있는 쓰레드에 소켓지정자를 넘겨줘서 쓰레드에서 read, write가 일어나게 하려고 합니다.
우선 서버소켓에 fnctl을 이용해 SIGRTMIN을 설정해주었습니다.
그리고, sigwaitinfo를 이용해 SIGRTMIN을 받아들이고, 이벤트를 통해 전달된 소켓이
서버소켓이면 클라이인트를 받아들이고, 그 소켓도 SIGRTMIN을 설정해 주고,
클라이언트소켓이면, 여유있는 쓰레드를 찾아서 해당 쓰레드에 sigqueue(pid, SIGRTMIN+signum, sv)로 이벤트를 전송합니다.
물론, 쓰레드에서도 역시 sigwaitinfo을 이용해 SIGRTMIN+signum의 이벤트를 기다리고 잇고요...
하지만, 문제는 sigqueue가 발생을 하면, "Real-Time Signal 1"이라는 메세지를 찍고 죽어버립니다.
gdb를 통해서 보면,
Program received signal SIG35, Real-time event 35.
[Switching to Thread -1208596800 (LWP 21138)]
0x00a747a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
이런 에러가 떨어지면서 죽어버리네요...
여러가지 바꿔보고 또 바꿔봐도 결과가 똑같이 나오네요...
혹시나 커널자체 문제가 아닌지 살짝 의심도 해보았지만, 아무래도 제가 뭔가 착각을 하고 있는거 같아서요~
고수님들 좀 부탁드리겠습니다. 할일이 태산인데, 이것때문에 진행이 안나가고 있네요...
참고로 커널버젼은 "Linux bp1 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008 i686 i686 i386 GNU/Linux" 입니다.


댓글 달기