다중 스레드 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()값을 덮어 쓸 수 있으므로 좋은 디자인이 아닙니다.