回答
線程的優點和缺點是它們與進程中的每個其他線程共享內存空間。您可以使用您在單線程應用程序中使用的任何形式的數據傳輸,以在您的應用程序段之間傳遞數據。但是,在多線程應用程序中,您必須使用某種類型的同步來確保數據完整性並防止死鎖。
如果「線程的數據」你想從外到修改是與__thread
擴展創建一個函數的局部變量在線程中運行,或者線程特定數據的形式,那麼只有即可方式從外部修改它們(UB中的模數代碼在技術上只是破壞內存)是通過讓線程獲取其變量的地址並將其存儲在其他線程可以看到它的地方(無論是在全局變量中,還是在通過線程啓動函數的參數void *
另請注意,正如重新指出的那樣,如果多個線程正在訪問相同的數據,則必須使用某種同步方法。只有標準/便攜式同步方法是pthread:pthread_mutex_lock
等,但您也可以使用匯編或編譯器內在函數(如gcc中的__sync_*
)。
如果沒有其他線程或函數修改相同的數據會怎麼樣。我只是想修改一些在線程中運行的數據。只需修改例如一個在線程函數外部聲明的指針,並在線程之外修改它。線程將讀取指向數據並更新會很好? – jarryd 2011-04-13 15:01:28
如果一個線程讀取另一個線程在沒有插入的pthread同步原語的情況下修改的內存,則每個POSIX的結果爲* undefined behavior *。實際上,它不會給你鼻子惡魔,但這意味着不能保證你的線程是否會「看到」另一個線程所做的改變。在x86和x86_64上,除非編譯器發現變量無法合法修改並優化重新加載,否則您將看到更改(「volatile」會修復此問題)。但在其他拱門上,可能需要特殊的記憶障礙。 – 2011-04-13 15:44:24
- 1. 停止從外部線程
- 2. 如何從線程修改字符串?
- 3. 從線程修改全局ArrayList
- 4. GCD和外部線程
- 5. 線程內部的代碼比外部線程慢?
- 6. 如何訪問線程外的線程數據
- 7. 從線程檢索數據
- 8. 堅持從線程數據
- 9. 修改客戶端線程的服務器變量(線程,python)
- 10. 修改線的一部分
- 11. 如何將數據從一個線程傳遞到另外三個線程?
- 12. PyQt4線程:發送數據回線程
- 13. QT多線程數據從主線程傳遞給工作線程
- 14. 應用程序正在從後臺線程修改Autolayout引擎
- 15. 從主線程或Web線程以外的線程獲取Web鎖定。 UIKit中不應該從輔助線程
- 16. PyQt的線程從線程
- 17. 線程更改變量值並查看其外部的更改
- 18. 在主線程上修改變量C#
- 19. 在線程內修改父類變量
- 20. 非UI線程修改UI組件
- 21. 使用Handler將數據從bg線程傳遞到UI線程?
- 22. 從後臺線程發送數據到主線程
- 23. 從線程到任何子線程的環境數據流
- 24. C# - 將數據從ThreadPool線程傳遞迴主線程
- 25. 線程數據集?
- 26. 從函數內部啓動線程
- 27. 從線程中獲取數據從XML?
- 28. 如何從線程以外的線程讀取組合框?
- 29. 從另一個線程修改向量中的指針數據是否安全?
- 30. 在Qt中修改非GUI線程中的小部件?
你在用什麼語言? – Joe 2011-04-13 14:02:37
C,使用POSIX線程 – jarryd 2011-04-13 14:02:56