Tôi đang gặp một số rắc rối trong lần đột nhập đầu tiên của mình vào chủ đề C. Tôi đang cố gắng viết một chương trình máy chủ rất đơn giản chấp nhận kết nối ổ cắm và bắt đầu một luồng mới để xử lý nó. Dường như nó hoạt động tốt ngoại trừ việc nó sẽ chỉ tạo khoảng 300 luồng (303, đôi khi 304) trước khi pthread_create() không thành công với mã EAGAIN, có nghĩa là:Tại sao pthread_create() không thành công với chỉ 2 luồng hoạt động?
"Hệ thống thiếu tài nguyên cần thiết để tạo một luồng khác, hoặc giới hạn áp dụng hệ thống trên tổng số luồng trong một quá trình {PTHREAD_THREADS_MAX} sẽ bị vượt quá. "
Đây là không phải là 303 chủ đề cùng một lúc - mỗi lần thoát khỏi chuỗi được xác nhận bởi gdb. Mỗi lần hàm yêu cầu quá trình được gọi là có hai luồng đang chạy.
Vì vậy, điều đó có nghĩa là "hệ thống thiếu các tài nguyên cần thiết". Câu hỏi của tôi là (và nó có thể hơi ngu ngốc) - những nguồn lực này là gì? Có lẽ đó là một rò rỉ bộ nhớ trong chương trình của tôi (chắc chắn có thể, thậm chí có thể), nhưng tôi đã nghĩ rằng ngay cả như vậy nó có thể quản lý hơn 300 xem xét phần còn lại của chương trình không rất ít.
Làm cách nào tôi có thể tìm hiểu xem có bao nhiêu bộ nhớ mà chương trình của tôi có sẵn để xác nhận rằng chương trình đã hết bộ nhớ? Có rất nhiều bộ nhớ và trao đổi miễn phí vì vậy có lẽ có một giới hạn nhân tạo áp đặt bởi hệ điều hành (Linux).
Cảm ơn
bạn có thể đăng bài đoạn mã tạo ra và phá hủy các chủ đề? –