線程是否有可能在同一進程中共享數據(全局變量)。C# - 多線程 - 共享數據
0
A
回答
5
2
當然是了。你只需要同步它們以避免死鎖。在C#中使用lock
來標記代碼中的關鍵部分。查看MSDN瞭解詳細信息。 :-)
0
是的。可能需要更多信息。
Object o = new Object();
int i; // Shared variable
lock(o)
{
// work with i.
}
1
相同程序中的多個線程可能共享數據。但是,您必須瞭解數據訪問和寫入的潛在問題。通常情況下,這會在編寫時讀取或嘗試訪問相同資源時出現問題。 [查看更多about race condictions]
1
是的,無論是通過引用靜態對象,公然提供跨線程的引用,還是跨線程封送(例如,UI控件調用/調度調用,儘管這不完全相同)。
雖然跨線程共享資源的同步是絕對重要的,但簡單地提倡將鎖(對象)作爲一攬子方法並不一定適用於所有情況。如果你有兩個線程被鎖定在另一個線程正在等待的共享對象上,你將會陷入僵局,因此必須考慮設計和處理流程。
除非必要,否則也不要鎖定整個類,否則可能會產生不必要的開銷並導致性能損失。對於需要同步的靜態類,最好提供一個靜態對象來鎖定與共享狀態交互的方法,而不是鎖定整個類: lock(_staticLockObjectInstance)over lock(typeof(staticClass))
1
0
同一進程中線程的默認行爲是共享全局存儲。
如果你不想共享存儲,那麼環境提供thread local storage。
如果您訪問共享存儲,那麼您可能需要使用鎖定,原子操作或內存隔離來同步對存儲的訪問。如果你忘記在代碼的任何部分這樣做,它可能會以不可預知的方式失敗。
相關問題
- 1. C#線程共享數據
- 2. 多線程 - 共享數據
- 3. 在C++中共享數據的線程
- 4. C++ - 在線程之間共享數據
- 5. Perl線程共享數據
- 6. C++/Windows多線程同步/數據共享
- 7. C++多線程共享資源
- 8. C#與多線程共享鎖
- 9. 多線程共享變量
- 10. 多線程共享資源
- 11. 多線程共享變量
- 12. 與多線程共享numpy數組
- 13. Java線程不共享靜態數據
- 14. Java:線程共享數據的框架
- 15. 在Java線程之間共享數據
- 16. 線程池,共享數據,Java同步
- 17. java之間共享數據線程
- 18. 阻止共享數據的Java線程?
- 19. 由一個線程與其他線程數組共享數據
- 20. C++,如何在進程或線程之間共享數據
- 21. 在線程之間共享數據數組-C++
- 22. 在線數據共享
- 23. 共享數據
- 24. 與多個python程序共享數據
- 25. 在java中的多線程共享數據
- 26. 在JAVA多線程中共享相同的數據區域?
- 27. 使用QAbstractTableModel中的多個線程之間共享的數據
- 28. 在多線程中共享數據 - 是非靜態變量嗎?
- 29. 共享內存多線程和數據訪問?
- 30. 核心數據 - 在多個線程之間共享NSManagedObjects
分享如何?全局變量,共享內存或其他方法?你可能想要進一步解釋。 – 2009-11-27 03:37:55
另外,我假設你是指在同一個進程中的線程,對吧? – CesarGon 2009-11-27 03:39:02