2009-06-30 27 views
6

Từ pthread_join trang người đàn ông():Tôi có phải pthread_join mỗi chuỗi tôi tạo không?

When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until thread performs pthread_join on it. Therefore, pthread_join must be called once for each joinable thread created to avoid memory leaks.

Liệu nó có nghĩa là tôi cần phải tham gia mỗi chủ đề tôi tạo để ngăn chặn rò rỉ? Nhưng tham gia chặn người gọi.

Vui lòng giải thích.

Trả lời

8

Bạn không cần để tham gia một chuỗi nhưng đó là một ý tưởng hay. Nếu không gọi pthread_join(), có khả năng hàm main() sẽ trả về trước khi luồng kết thúc. Trong trường hợp này, pthread_join() làm cho ứng dụng chờ cho đến khi luồng khác kết thúc quá trình xử lý. Ngoài ra, khi bạn tham gia chuỗi, nó sẽ cho bạn cơ hội kiểm tra các giá trị trả về và đảm bảo mọi thứ suôn sẻ, và nó mang đến cho bạn cơ hội để dọn sạch mọi tài nguyên bạn có thể đã chia sẻ với chuỗi.

EDIT: Một hàm có thể bạn quan tâm là pthread_detach(). pthread_detach() cho phép lưu trữ của thread được làm sạch sau khi thread kết thúc, do đó, không cần phải tham gia thread sau đó.

+2

bạn cũng có thể tạo chuỗi bằng thuộc tính PTHREAD_CREATE_DETACHED bằng cách sử dụng pthread_attr_setdetachstate – Hasturkun

+0

Tôi nghĩ có một tham số như vậy, nhưng tôi không thể nhớ nó được gọi là gì. Cảm ơn vì đã làm mới trí nhớ của tôi! –

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