pthread_create trong máy chủ http đa luồng
Aug 22 2020
Giả sử máy chủ xử lý các máy khách theo cách sau:
void* handle_request(void* client_sck);
int client_sck;
while((client_sck = accept(...)) != -1)
{
/*
.
.
.
*/
pthread_create(&thr, 0, handle_request, (void*)&client_sck);
}
Có an toàn không khi nói rằng, trên mỗi lần lặp vòng lặp, đối số cuối cùng được chuyển đến pthread_createsẽ được chia sẻ giữa các luồng? Có nghĩa là lần thứ hai, client_sck vẫn có cùng địa chỉ với lần lặp trước.
Trả lời
1 VolkerStolz Aug 22 2020 at 15:04
Đúng. Điều này có nghĩa là luồng tiếp theo accept() có thể ghi đè giá trị trước khi luồng trước có cơ hội tìm nạp giá trị, vì vậy nó không phải là một thiết kế tốt.