據我所知,當你需要用返回值終止一個線程時,pthread_exit()恰好等於返回。當人們可以使用一致的方式,即返回來完成Pthread爲什麼定義這樣一個重複的接口?Pthread:爲什麼人們會使用pthread_exit?
10
A
回答
9
兩個原因,我想起:pthread_exit
允許您從調用堆棧任何深度退出線程。
Must be called on the main thread if the TLS keys for the main thread are to have their free functions called.這裏還有:「已經推尚未殺出以相反的順序被彈出,他們推,然後所有執行取消清理處理程序之後的任何取消清理處理程序已經執行,如果線程具有任何線程特定的數據,適當的析構函數將以未指定的順序調用......當第一次調用main()的線程之外的線程從啓動例程返回時,隱式調用pthread_exit()被用來創建它,函數的返回值作爲線程的退出狀態。「
3
如果你要調用了pthread_exit複製的接口,那麼你也應該叫exit()
複製的界面,因爲你可以在任意點退出程序。當您遇到某種您無法繼續的錯誤情況時,您可能需要致電pthread_exit()
。或者,您也可以在線索內找到您要查找的任何值。
至於它是真實存在的,根據documentation:
當比線程以外的線程中的main()首次調用返回從啓動程序到了pthread_exit隱式調用()由這是用來創建它。該函數的返回值用作線程的退出狀態。
所以,如果你從線程做了return <some pointer>
,或者只是到了最後,pthread_exit()
就會被調用。從main()
退出也是一樣,如果你return 0
你實際上打電話給exit(0)
。函數必須存在,否則內核將無法確定線程是否退出。
相關問題
- 1. 爲什麼我們在使用return時使用pthread_exit()?
- 2. 爲什麼人們使用textmate?
- 3. 爲什麼人們使用JSP?
- 4. pixel.gif,爲什麼人們使用它?
- 5. 爲什麼人們使用`Module.send(:prepend,...)`?
- 6. 爲什麼人們會在PHP中使用'$ a = $ b = 2;`?
- 7. pthread啓動函數中的return()與pthread_exit()
- 8. 爲什麼會有人使用!在JavaScript?
- 9. AssemblyAlgorithmIdAttribute:爲什麼有人會使用它?
- 10. 使用pthread_exit和pthread_join。了pthread_exit不會終止調用函數
- 11. 爲什麼pthread_exit會拋出省略號捕獲的東西?
- 12. 爲什麼人們不會在通用類中包裝DependencyProperties?
- 13. 人們使用Elasticsearch做什麼?
- 14. 代碼檔案?人們使用什麼?
- 15. 什麼使pthread失效?
- 16. 什麼是Autoconf?爲什麼人們使用它?我應該使用它嗎?
- 17. 爲什麼人們使用評論作爲商業邏輯
- 18. 爲什麼我們需要「-pthread」標誌來編譯c文件
- 19. 爲什麼有人會使用寶石外國人?
- 20. 爲什麼人們不會在iOS5上使用MAC地址而不是UDID?
- 21. 爲什麼有人會用這個?
- 22. JavaFX - 人們會怎麼想?
- 23. 爲什麼人們以散列形式保存會話數據?
- 24. 內部抽象方法。爲什麼會有人擁有它們?
- 25. 爲什麼人們會這樣創建數組列表?
- 26. 他們爲什麼叫做「四人幫」?
- 27. 爲什麼人們在ICommands上使用CommandManager.InvalidateRequerySuggested()?
- 28. 爲什麼人們不使用<CFLOGIN>?
- 29. 爲什麼人們使用jQuery進行基本操作?
- 30. 爲什麼人們使用Velocity和/或NVelocity?
不同意。在這兩種情況下,pthread_exit仍然可以被return替換。 – 2012-01-05 22:58:50
對於#1,是的,但這樣做可能不方便。對於#2,它不能。看到我發佈的鏈接。我最近在真實世界中遇到了這個問題。 – 2012-01-05 23:00:57
@Mengfei:如果你在'pthread_create()'啓動的函數中,'pthread_exit()'只能被'return'替換。如果線程在函數調用堆棧中更深一些,那麼'return'根本不會做同樣的事情。 – 2012-01-06 05:18:58