다중 스레드 http 서버의 pthread_create
Aug 22 2020
서버가 다음과 같은 방식으로 클라이언트를 처리한다고 가정합니다.
void* handle_request(void* client_sck);
int client_sck;
while((client_sck = accept(...)) != -1)
{
/*
.
.
.
*/
pthread_create(&thr, 0, handle_request, (void*)&client_sck);
}
각 루프 반복에서 전달 된 마지막 인수 pthread_create가 스레드간에 공유 된다고 말하는 것이 안전 합니까? 두 번째로 client_sck는 이전 반복과 동일한 주소를 가지고 있음을 의미합니다.
답변
1 VolkerStolz Aug 22 2020 at 15:04
예. 즉 , 이전 스레드가 값을 가져 오기 전에 다음 스레드가 accept()값을 덮어 쓸 수 있으므로 좋은 디자인이 아닙니다.