マルチスレッド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スレッド間で共有されると言っても安全ですか?2回目は、client_sckが前の反復と同じアドレスを持っていることを意味します。

回答

1 VolkerStolz Aug 22 2020 at 15:04

はい。これは、前のスレッドが値をフェッチする前に、次の スレッドがaccept()値を上書きする可能性があることを意味するため、適切な設計ではありません。