멀티쓰레드로 한 소켓에 대해서 Write 하는 경우에 대해 질문 드립니다..

zzang3757의 이미지

음,, 갑자기 궁금한게 생겨 한가지 테스트를 해보고있습니다.

서버는 연결된 클라 1명에게 3개의 쓰레드로 "aaaa~~" "bbbb~~" "cccc~~" 이렇게 각각 300바이트씩 500번 Write를 하게 하였습니다.

클라의 수신버퍼 크기는 300바이트로 셋팅하였습니다 ~

클라에서는 300바이트씩 Read 하여 파일에 출력하도록 하였습니다. 물론 클라는 멀티쓰레드로 Read하는것이 아니라 싱글쓰레드입니다.
서버의 Write만 3개의 쓰레드로 하는것입니다..

근데 파일에 찍힌 결과를 보면..

aaaaaaaaaaaaaaaaaaaa ~
bbbbbbbbbbbbbbbbbbbb ~
aaaaaaaaaaaaaaaaaaaa ~

이렇게 300개씩 잘 찍히다가 어느순간 보면

aaaaaaaaaabbbbbbb 이런식으로 패킷이 겹치는 순간이 있는 것 같습니다.

이게 진짜 패킷이 겹치는 것인지,, 이런경우엔 어떻게 처리해야하는건지 궁금합니다..

조언 부탁드립니다.

감사합니다.

익명 사용자의 이미지

특정 쓰레드가 cpu에 할당되어 해당 쓰레드가 300바이트의 문자를 모두 write하기 전에 context switching이 발생하여 다른 쓰레드가 cpu에 할당될 경우 위와 같이 패킷이 겹치게 되구요~
이를 방지하기 위해 쓰레드간 동기화 메카니즘이 필요하게 됩니다.
동기화 방식은 멀티쓰레드 프로그래밍관련 자료를 찾아보시면 많이 나올거에요~~