두 쓰레드에서 epoll_ctl과 epoll_wait
글쓴이: powring / 작성시간: 금, 2008/05/30 - 10:33오전
안녕하세요.
간단한 서버 프로그램을 epoll을 이용해서 작성하고 있습니다.
epoll예제들을 보니 서버소켓도 한꺼번에 epoll이벤트로 등록하고서
쓰던데 저는 그 스타일이 별로 보기 안 좋은거 같아서 서버소켓은
따로 쓰레드를 돌리고, 나머지 클라이언트 메시지를 처리하는
쓰레드를 따로 돌리고 있습니다.
여기서 문제가 새로 클라이언트가 서버소켓으로 접속하면, 일반적인 큐에
뮤텍스락을 걸고 클라fd를 push합니다. 그리고 클라이언트 메시지
처리 쓰레드에서는 epoll_wait에 타임을 한 10ms정도로 걸면서
루프를 돌다가 큐에 새로운 내용이 있으면 pop해서 epoll_ctl로
새 클라를 등록합니다.
이렇게되면 클라쓰레드에서 10ms마다 계속 루프를 돌게 되는데
그냥 epoll_wait에서 블락시켜보고싶어서요.
그래서 큐를 안쓰고 서버소켓 쓰레드에서 accept되면 그걸 바로
epoll_ctl로 서버소켓 쓰레드에서 추가를 하게되면(클라스레드에서
epoll_wait중일 수도 있고 아닐 수 도 있습니다.) 제대로 작동할지
궁금하네요. epoll_wait중에 ctl로 아무리 추가해봤자 소용 없을
것도 같고...
아니면 좀 더 좋은 구조가 있다면 소개해주시면 감사하겠습니다.
Forums:


댓글 달기