[Q] 하나의 소켓에 여러 쓰레드가 동시에 write 한다면?

hohory의 이미지

안녕하세요.

udp socket이든, tcp socket이든,
하나의 socket에 data write를
여러 thread에서 동시에 하게 되면,
문제가 생기는지요?

socket에 write할때,
사용하는 함수로는 send/sendto/write 정도가 있을텐데,
이들은 모두 system 함수이므로,
이 함수가 완전히 완료될때까지
다른 thread로 제어권이 넘어가지 않는지...

그렇지 않고, send/sendto/write 함수내에서,
put 함수와 같은 타 함수를 호출하는 로직이 있음으로 인해,
하나의 thread에서 하나의 send/sendto/write 함수가 완료 되기 전에,

다른 thread로 제어권이 넘거가게 되면,
하나의 소켓에 여러 thread가 data를 write할때,
동기화를 해 주지 않으면
문제가 생길것으로 보는데, 궁금합니다.

고수님들의 고견 부탁드립니다.

prether의 이미지

generic_file_write()들어가 보니 파일의 식별자인 inode 객체 별로
semaphore 를 획득/풀기를 이용하여 race condition으로부터
data를 보호하는 군요.

thread간 동일 FD로 write()를 해도 문제없습니다.

/***************************************
Being the one is just like being in love.
***************************************/

kewlbear의 이미지

send에 요청한 데이터가 전부 전송되지 않을 수 있기 때문에 문제가 될 것 같습니다.