쓰레드에서 epoll_ctl() 혹은 select() 질문입니다.
글쓴이: cococo / 작성시간: 목, 2009/11/19 - 9:55오전
안녕하십니까. 내일만 지나면 주말이네요. ^^.
thread에서 epoll()을 사용할 때의 질문인데요.
epoll_wait()로 감시중에 다른 thread에서 epoll_ctl( ); 로 FD를 추가하거나 삭제하면, 추가 혹은 삭제한 FD에 대해서도 감시가 이루어 지는 건가요?
조금 자세히 말씀드리면,
스레드를 몇 개 띄워서 socket을 listen / watch 하는데요,
문제는 소켓이 접속만 하는 게 아니라, 떨어져 나가기도 한다는 거죠.
그럼, 만약
1. 쓰레드 A에서 epoll_wait()가 작동중
2. 쓰레드 B에서 epoll_ctl()로 새 FD 추가
하면, 과연 쓰레드 A의 epoll_wait() 가 쓰레드 B에서 추가된 FD를 즉시 감시하기 시작하는가...(혹은 반대로 떨어져 나가면, 바로 감시를 중단하는가)
하는 겁니다.
epoll관련 내용을 검색해 봤는데, 쓰레드 관련 내용은 서술된 게 없더라구요. 당연히 되기 때문에 없는 건지, 아니면 당연히 안되기 때문에 없는 건지. -_-;
일단은 select()를 생각해 봤는데, select()는 반드시 FDSet 을 추가해 주면 select()를 다시 시작해야 하니, 가급적이면 사용하고 싶지 않더라구요.
혹시 비슷한 경우를 겪으셨거나, 혹은 제가 접근하는 관점이 잘못되었다면, 언급 부탁드립니다.
그럼, 좋은 하루 되시기 바랍니다.
Forums:
-- 1. 쓰레드 A에서
-- 1. 쓰레드 A에서 epoll_wait()가 작동중
-- 2. 쓰레드 B에서 epoll_ctl()로 새 FD 추가
-- 하면, 과연 쓰레드 A의 epoll_wait() 가 쓰레드 B에서 추가된 FD를 즉시 감시하기 시작하는가
예
댓글 달기