2009-03-08 27 views
6

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

+0

bạn có thể đăng bài đoạn mã tạo ra và phá hủy các chủ đề? –

Trả lời

10

Nếu bạn không tạo ra các chủ đề với các thuộc tính PTHREAD_CREATE_DETACHED (hoặc tách chúng bằng pthread_detach(), bạn có thể cần phải gọi pthread_join() trên mỗi thread được tạo ra sau khi nó thoát để giải phóng các nguồn lực liên kết với nó.

+0

Thankyou! Chỉ cần thiết lập thuộc tính đó và nó cũng đi qua 4000 chủ đề và đếm.Cảm ơn nhiều - đó là khoảng 3 giờ thất vọng cố định :) – Ray2k

0

Có thể là một overkill chút (?) Nhưng Valgrind có thể giúp bạn xác định vị trí memleaks trong Linux.

Bạn có thể đăng một số đoạn mã không? Tốt hơn là các phần mà bạn cấp phát/bộ nhớ/ổ cắm miễn phí và nơi bạn tạo chủ đề của mình.

Các vấn đề liên quan