TCP/IP에서 2개의 Thread (main + thread)에서 socket을 공유하는데 문제가 없을까요..?
글쓴이: bsakiag / 작성시간: 금, 2010/09/10 - 11:24오전
안녕하세요.
어떤 서버 프로세스의 main() 함수에서는 접속한 client의 소켓을 recv()만 하고,
별도로 생성한 Thread에서는 send()만 수행 하려고 합니다.
하나의 소켓을 이렇게 2개의 쓰레드 (main() + thread)에서 이렇게 send/recv 를 전담하면서 사용해도 문제가 없을까요?
소켓 이외의 모든 변수/버퍼는 공유하지 않습니다.
PS: 이렇게 하는 이유는, 별도의 thread가 메시지Q를 recv wait 하고, 수신시 send()를 하기 때문입니다.
그럼..미리 감사를...
Forums:
음..
별 문제 없을 것 같은데요 뭔가 걸리시는 일이라도 있나요?
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
감사합니다.
댓글 감사합니다.
단순히 2개의 thread가 소켓을 공유하므로.. 혹시 send()/recv()를 각 thread가 동시에 수행할 경우에.. 문제가 생기지 않을까.. 해서요..
혹시라도, send/recv시에 동일한 소켓을 mutex같은 것으로 sync를 수행해야 하는거 아닌가..하는 생각이 들어서 질문을 올린겁니다.
문제는 생기지
문제는 생기지 않습니다. 굳이 직접 동기화 안해주셔도 커널에서 알아서 해줍니다.
단지 논리적인 시간적 순서로 인해 데이터가 오고 가는 순서만 안꼬이게 해주시면 됩니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
감사합니다.
많은 도움이 되었습니다.
댓글 달아주신 두분께 감사드립니다.
걱정되시면..
소켓info 구조를 하나만들고 Mutex만 걸어두면 괜찮지 않을까요?
send 만 주의하면 될 것 같습니다.
보통 recv 를 multi-thread 로 하지는 않으니.. 큰 상관이 없을 것 같고..
전송 속도를 높여볼려고, 또는 여타의 이유로 send를 multi-thread 로 하는 경우,
TCP 라면, 두 thread 에서 보내는 메세지가 뒤죽박죽이 되더군요.
결국 lock 를 사용할 수 밖에 없었습니다.
UDP는 귀찮아서 안해봤습니다. :)
..........No Sig.........|
-------------------+
..........No Sig.........|
-------------------+
댓글 달기