當我在一個程序中創建一個新的線程...在它的線程處理函數中,爲什麼我要通過線程函數原型將參數(如void指針)作爲參數傳遞給我想要的線程?由於線程與主程序共享相同的內存段(堆棧除外),我不應該直接使用變量而不是從主程序向新線程傳遞參數嗎?爲什麼要通過線程函數傳遞參數?
0
A
回答
3
嗯,是的,你可能直接使用變量。也許。假設在你的線程開始運行之前它們沒有被其他線程改變。另外,函數傳遞參數(包括線程函數)的很大一部分是限制被調用函數必須知道的關於外部世界的信息量。如果你爲了完成它的工作而傳遞線程函數所需的所有東西,那麼你可以相對不受懲罰地改變程序的其餘部分,線程仍然可以繼續工作。但是,如果強制線程知道有一個名爲MyStringList
的全局字符串列表,則不能在不影響線程的情況下更改該全局列表。
信息隱藏。封裝。關注點分離。等
0
您不能以任何類型的正常註冊/堆棧方式將參數傳遞給線程函數,因爲線程函數不會由創建線程調用 - 它們由底層操作系統直接執行,並且執行此副本的API直接執行一個固定數量的參數(通常只有一個void指針)到新線程的新的不同堆棧。
正如吉姆所說,不理解這種機制通常會導致災難。關於那些開發的變量有什麼問題。在新線程開始之前,希望會被新線程使用。
相關問題
- 1. 爲什麼要通過寄存器將參數傳遞給`__switch_to`函數?
- 2. 通過構造函數傳遞什麼以及通過接口傳遞什麼?
- 3. C++:通過模板傳遞參數Vs通過函數參數
- 4. 通過函數參數傳遞變量
- 5. 通過高階函數傳遞參數
- 6. 通過db.transaction函數傳遞參數
- 7. 通過函數傳遞參數
- 8. 什麼參數傳遞給EOF()函數
- 9. 爲什麼cppcheck說「函數參數應該通過引用傳遞」?
- 10. 爲什麼我需要傳遞參數到$ uibModalInstance.close(參數)
- 11. 通過存儲過程傳遞參數
- 12. 爲什麼要將互斥量作爲參數傳遞給線程所調用的函數?
- 13. 爲什麼在通過參數傳遞值時會得到零?
- 14. 爲什麼Perl允許通過引用傳遞參數?
- 15. 爲什麼要將接口作爲參數傳遞給android中的函數?
- 16. 爲什麼要在PHP中通過引用傳遞原始類型參數?
- 17. x86程序集:通過堆棧將參數傳遞給函數
- 18. 將函數作爲參數傳遞以簡化線程創建
- 19. 傳遞參數給線程
- 20. Python線程傳遞參數
- 21. 線程傳遞參數
- 22. 傳遞參數給線程
- 23. JavaScript「參數」 - 通過其他參數傳遞函數
- 24. R:通過圖形作爲參數傳遞給函數
- 25. 通過文件/函數傳遞結構作爲參數
- 26. 爲什麼在IA32堆棧過程中向後傳遞參數?
- 27. 通過url傳遞參數
- 28. 通過ICommand傳遞參數
- 29. 通過server.execute傳遞參數?
- 30. 通過url傳遞參數