동일한 socket write 시의 쓰레드 동기화
글쓴이: osanha / 작성시간: 수, 2008/10/22 - 11:11오후
write 가 비록 내부에서는 세마포어로 동기화되어 쓰고 있다고 하지만,
소켓에 쓰는 경우 버퍼의 양만큼 다 쓰지 못하여 연속해서 write 하는 루틴이 필요하니.
동일한 fd에 있어서는 다중 쓰레드로부터 write를 동기화 시켜야 할 것같은데,
개념적으로는 대략 다음과 같은식이 될 것같은데..
typedef struct { int sockfd; pthread_mutex_t mutex; } msock_t; msock_t sockets[1024]; void write_from_multi_threads(int index, void* buf, size_t size) { msock_t* sock = &sockets<ol> </ol> ; pthread_mutex_lock(&sock->mutex); write(sock->fd, buf, size); pthread_mutex_unlock(&sock->mutex); }
동기화가 필요한게 맞는지요?
Forums:
맞습니다.
항상 write buffer보다 작은 양을 써서 no wait로 쓰고자 하는 양을 다 쓰고 return할 수 있다는 것이 보장되지 않는 이상, 호출하는 쪽에서 동기화를 해 주어야 합니다.
write 함수를 한번 더
write 함수를 한번 더 싸주세요. write 호출 한번으로 끝날수도 있고 그렇지 않을 수도 있습니다.
어느 정도의 시간 딜레이를 줄건지도 한번 더 싸준 함수에서 정해주면 더 좋구요.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
댓글 달기