我對C和C++中的並行編程有一個普遍的疑問,如果你能回答它,我將不勝感激。據我所知,我們可以在至少一個級別(父線程)中聲明一個變量以在子線程中共享它。所以,我想知道是否有任何其他方式共享同一父線程線程之間的變量?這個API是否依賴?在線程間共享變量的方法
回答
對於Posix線程,請閱讀pthread tutorial。
對於C++11,讀取其thread library
所有threads相同process份額相同address space在virtual memory的文檔。如Marco A.所述,也可考慮thread_local變量。
您共享數據或 memory(不變量,它們只存在於源代碼)在實踐
注意,你會更好地與一個mutex共享數據(同步)保護,以避免data races。
在簡單情況下,互斥鎖和共享數據在一些全局變量中。
您也可以使用atomic操作。
順便說一句,您還可以使用一些message passing範例開發並行應用程序,例如,使用MPI(或簡單地使用一些RPC或其他消息,例如套接字上的JSON)。您可能會考慮使用常規數字應用程序來使用GPGPU,例如使用OpenCL。當然,你可能會混合使用所有的方法(使用OpenCL,與幾個線程,並讓您的並行軟件運行在幾個這樣的進程與MPI通信)。
調試高度並行的軟件可能會變成一場噩夢。性能可能取決於硬件系統,可能需要棘手的調整。 scalability和synchronization可能成爲越來越多的關注。 map-reduce通常是一個有用的模型。
也許也是相關的:[thread_local](http://en.cppreference.com/w/cpp/language/storage_duration)(TLS標準強制執行) – 2014-10-02 16:19:52
我更期待共享數據(變量)可以聲明。無論使用哪個並行編程API,它都必須至少比想要共享它的線程高一級。對? – user3684042 2014-10-02 16:36:05
* *變量*是源代碼中的文本內容。重要的是記憶位置。 (考慮遞歸函數中的局部變量以查看差異)。 – 2014-10-02 16:50:09
在C++和C中,任何內存位置(由變量標識)都可以在線程間共享。內存空間在所有線程中都是相同的。沒有與內存的父/子線程關係。
挑戰在於控制或同步對線程之間的內存位置的訪問。
這是依賴於實現。
任何全局變量都可以在線程中共享,因爲線程是共享相同地址空間的輕量級進程。對於同步,您需要確保互斥,同時通過信號量或等待通知塊更新/訪問這些全局變量。
- 1. 線程之間共享一個方法的局部變量嗎?
- 2. 在方法之間共享變量
- 3. sidekiq共享線程間變量
- 4. 多線程共享變量
- 5. 多線程共享變量
- 6. Watin ApartmentState.STA線程和父線程之間的共享變量?
- 7. 一種通過Rails在多個httpd線程之間共享變量的方法?
- 8. 無法與websockify共享線程之間的變量
- 9. 在進程之間共享變量
- 10. 在Python中的兩個線程之間共享變量
- 11. 在Tensorflow中的線程之間共享變量
- 12. 如何在Java中的兩個線程之間共享變量?
- 13. 如何在java中的兩個線程之間共享變量?
- 14. Python在線程間創建共享變量
- 15. 在線程之間共享一個變量?
- 16. PHP:在線程之間共享靜態變量
- 17. 如何在2個線程之間共享變量
- 18. 無法在單獨的線程中獲取共享變量值
- 19. cuda:線程塊之間共享'常量'
- 20. 線程共享實例變量
- 21. Python PyQt4線程化,共享變量
- 22. 兩線程共享靜態變量
- 23. python線程和共享變量
- 24. 線程是否共享局部變量?
- 25. 提升多線程和共享變量
- 26. 多線程共享本地變量
- 27. CUDA多線程寫入共享變量
- 28. Python 3:在一個類中的方法之間共享變量
- 29. 在Ember.js中的方法之間共享變量上下文
- 30. 在Rails控制器中共享方法之間的變量
您還可以通過[消息傳遞](http://en.wikipedia.org/wiki/Message_passing)系統交易信息跨線程,這些信息可能非常適合您想要的變量值或地址分享 – Drax 2014-10-02 16:03:52
這裏的兩個主要問題是:a。是要寫入的「共享」變量?灣這很關鍵嗎?我可以在啓動我的線程之前定義一個全局的init,並將它用作只讀(糟糕的設計,但工作原理)。另外,如果我更新它,並且其他線程中的值並不重要(例如,我僅將它用作調試查看器),我可以再次使用它。如果它很重要並且需要改變,那麼存在一個問題 - C++內存模型(或缺乏它)。請參閱Basile針對每個版本/實現的答案。 – Fox 2014-10-02 16:15:27
我更想找到可以聲明共享數據(變量)的地方。無論使用哪個並行編程API,它都必須至少比想要共享它的線程高一級。對? – user3684042 2014-10-02 16:38:21