다중 쓰레드를 이용하여 프로그램을 짤 때,
send, sendto 에 대해서 동기처리를 해야 하는지 궁금합니다.
send, sendto 가 여러 쓰레드에서 동시에 불릴 경우 패킷이 섞여서 가거나 하는 문제가 없을까요?
atomic 을 지원하지 않는 함수라면 하나의 소켓에 대해서 데이터를 동시에 여러쓰레드가 넣었을때 문제가 발생할 수 있습니다.
보통 write()계열의 함수에서는 PIPE_BUF 사이즈만큼까지만 atomic을 보장해주기 때문에 이보다 더 길게 전송하는 경우는 mutex를 걸어주셔야 합니다.
======================================== * The truth will set you free.
소켓에 보내기 큐를 따로 구현하셔도 됩니다. 보내기가 한번에 안될 경우도 있기 때문에 큐처리를 하는 것도 좋았습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
atomic이 아니라면 해줘야 합니다.
atomic 을 지원하지 않는 함수라면 하나의 소켓에 대해서 데이터를 동시에 여러쓰레드가 넣었을때 문제가 발생할 수 있습니다.
보통 write()계열의 함수에서는 PIPE_BUF 사이즈만큼까지만 atomic을 보장해주기 때문에 이보다 더 길게 전송하는 경우는 mutex를 걸어주셔야 합니다.
========================================
* The truth will set you free.
소켓에 보내기 큐를 따로 구현하셔도 됩니다. 보내기가 한번에 안될 경우도
소켓에 보내기 큐를 따로 구현하셔도 됩니다. 보내기가 한번에 안될 경우도 있기 때문에 큐처리를 하는 것도 좋았습니다.
댓글 달기