我的問題的快速版本:.NET多線程同步
是否只有在訪問同一個對象實例時需要使用「鎖定」?例如,如果我在我的線程入口方法中實例化新的所有東西,我是否必須擔心鎖定任何對象?
詳細我的問題的說明:
我的情況是,我有一個唯一的標識符工作對象,而且工作對象中有1種方法。在該方法中,我創建了多個Web服務代理的新實例,並將從這些調用中檢索到的信息存儲在工作對象的公共屬性中。一旦所有工作完成(所有線程都完成),我將信息存儲到數據庫中。
任何理由考慮使用「鎖」?
我的問題的快速版本:.NET多線程同步
是否只有在訪問同一個對象實例時需要使用「鎖定」?例如,如果我在我的線程入口方法中實例化新的所有東西,我是否必須擔心鎖定任何對象?
詳細我的問題的說明:
我的情況是,我有一個唯一的標識符工作對象,而且工作對象中有1種方法。在該方法中,我創建了多個Web服務代理的新實例,並將從這些調用中檢索到的信息存儲在工作對象的公共屬性中。一旦所有工作完成(所有線程都完成),我將信息存儲到數據庫中。
任何理由考慮使用「鎖」?
您只需要在不應同時運行的一段或多段代碼上使用lock
。例如,如果您的代碼在多個線程上使用相同的List<T>
,則需要使用鎖定。
對於你的情況,如果你有一個單獨的工作對象每個線程,如果他們不與任何其他工作對象交互或訪問任何共享狀態,你應該沒問題。
對於一個更具體的答案,請發佈更多的細節,或者,最好是來源。
編輯:在回答你的評論,它取決於InvokeService
實施。只要它不訪問任何其他靜態成員,你可能會運行良好,沒有任何鎖。
你說得很對 - 你不需要鎖定不在線程間訪問的對象。
但是,請注意,沒有全局資源(即I/O流),它們在沒有同步的情況下被多個線程訪問。
關於I/O流,我可能會最接近的是,我的線程入口方法也訪問網站來解析數據。我正在創建一個'StreamReader'來分析HttpWebResponse對象的值。 – Benny 2009-10-22 02:25:23