2012-01-05 19 views

Trả lời

9

Có hai lý do mà tôi suy nghĩ của tôi: pthread_exit

  1. Cho phép bạn để thoát khỏi một chủ đề từ bất kỳ độ sâu trong các cuộc gọi stack.

  2. Must be called on the main thread if the TLS keys for the main thread are to have their free functions called. Và tại đây là tốt: "Mọi trình xử lý xóa sạch đã được đẩy và chưa xuất hiện được bật theo thứ tự ngược lại mà chúng đã được đẩy và sau đó được thực hiện. Sau khi tất cả trình xử lý xóa đã được thực hiện, nếu chuỗi có bất kỳ dữ liệu cụ thể theo chủ đề nào, hàm hủy tương ứng sẽ được gọi theo thứ tự không xác định ... Một cuộc gọi ngầm định tới pthread_exit() được tạo khi một luồng khác với luồng trong đó hàm main() lần đầu tiên được trả về từ thường trình bắt đầu đã được sử dụng để tạo ra nó. Giá trị trả về của hàm hoạt động như trạng thái thoát của luồng. "

+1

Không đồng ý. Trong hai trường hợp này pthread_exit vẫn có thể được thay thế bằng cách trả về. –

+3

Đối với # 1, có, nhưng nó có thể không được thuận tiện để làm như vậy. Đối với # 2, nó không thể. Xem liên kết tôi đã đăng. Gần đây tôi đã gặp phải điều này trong thế giới thực. –

+4

@Mengfei: 'pthread_exit()' chỉ có thể được thay thế bằng 'return' nếu bạn đang ở trong hàm bắt đầu bằng' pthread_create() '. Nếu luồng sâu hơn trong ngăn xếp cuộc gọi hàm, 'return' sẽ không làm điều tương tự chút nào. –

3

Nếu bạn đang đi để gọi pthread_exit một giao diện trùng lặp, sau đó bạn cũng nên gọi exit() một giao diện trùng lặp, vì bạn có thể thoát khỏi chương trình tại một điểm tùy ý. Bạn có thể muốn gọi pthread_exit() khi bạn có một số loại tình trạng lỗi mà bạn chỉ đơn giản là không thể tiếp tục. Hoặc, cách khác, bạn đã tìm thấy bất kỳ giá trị nào bạn đang tìm kiếm bên trong chuỗi.

Đối với nó là sự tồn tại thực tế, theo documentation:

Một cuộc gọi ngầm để pthread_exit() được thực hiện khi một thread khác với thread trong đó main() lần đầu tiên được gọi trở lại từ thói quen khởi đầu đã được sử dụng để tạo ra nó. Giá trị trả về của hàm hoạt động như trạng thái thoát của luồng.

Vì vậy, nếu bạn đã thực hiện một return <some pointer> từ chủ đề hoặc chỉ cần truy cập kết thúc, pthread_exit() sẽ vẫn được gọi. Nó giống với việc thoát khỏi main(), nếu bạn return 0 bạn đang thực sự gọi số exit(0). Hàm phải tồn tại, nếu không hạt nhân sẽ không có cách xác định xem luồng có bị thoát hay không.

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