pthread_create в многопоточном http-сервере

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()может перезаписать значение до того, как предыдущий поток получит возможность получить значение, так что это плохой дизайн.