Theo tôi hiểu, pthread_exit() chính xác bằng để trả về khi bạn cần chấm dứt một chuỗi có giá trị trả lại. Khi mọi người có thể sử dụng cách nhất quán, tức là trả lại, để thực hiện công việc tại sao Pthread xác định giao diện trùng lặp như vậy?Pthread: Tại sao mọi người lại bận tâm sử dụng pthread_exit?
Trả lời
Có hai lý do mà tôi suy nghĩ của tôi: pthread_exit
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.
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. "
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.
- 1. BREW: Tại sao mọi người lại quan tâm đến nó nữa?
- 2. Tại sao phải bận tâm với initializers? (.net)
- 3. Tại sao một người nên bận tâm với các chỉ thị tiền xử lý?
- 4. Tại sao mọi người không sử dụng <CFLOGIN>?
- 5. Tại sao một người sử dụng lại 'undefined`?
- 6. pthread_join() và pthread_exit()
- 7. Tại sao mọi người không thích chú thích?
- 8. Tại sao mọi người sử dụng ATL cho lập trình COM?
- 9. Tại sao mọi người sử dụng i = i + 1 thay vì i + +?
- 10. pthread_exit vs trở
- 11. Tại sao lại sử dụng hashmap?
- 12. Tại sao mọi người gọi jQuery $ alias là 'nhà máy'?
- 13. Tại sao mọi người liên tục khuyên bạn nên sử dụng appConfig thay vì sử dụng tệp Cài đặt? (.NET)
- 14. Tại sao mọi người sử dụng enums trong C++ như hằng số trong khi họ có thể sử dụng const?
- 15. Tại sao lại sử dụng NSFetchedResultsController?
- 16. Tại sao lại sử dụng document.write?
- 17. Tại sao ListView lặp lại mọi mục thứ 6?
- 18. Tại sao một người nào đó nên sử dụng Hồ sơ Khách hàng .NET Framework 4?
- 19. Có ai bận tâm với Dublin Core nữa không?
- 20. Make html5 geolocation xin phép mọi người sử dụng thời gian tải lại trang
- 21. tại sao KHÔNG MỌI MỌI mặc định là UTF-8?
- 22. tại sao pthread gây ra một bộ nhớ bị rò rỉ
- 23. Tại sao một người sử dụng "git merge -s ours"?
- 24. Tại sao tôi lại sử dụng một chuỗi trách nhiệm đối với một người trang trí?
- 25. Tại sao mọi người nói rằng Java có khả năng mở rộng hơn so với python?
- 26. Tại sao lại sử dụng Fragment # setRetainInstance (boolean)?
- 27. Tại sao lại sử dụng JsHelper của CakePHP?
- 28. Tại sao mọi người nghĩ rằng người duy nhất tạo ra C++ là Bjarne Stroustrup?
- 29. Nếu SqlDataAdapter sử dụng trình đọc dữ liệu nội bộ, tại sao mọi người nói rằng sử dụng SqlDataReader nhanh hơn?
- 30. Tại sao lại sử dụng lại UITableViewCell theo cách thủ công khi tải lại hàng?
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ề. –
Đố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. –
@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. –