2011-05-19 220 views
8

我一直在閱讀其他問題以及谷歌搜索的很多,我一直無法找到一個明確的解決方案。c#線程安全深度複製

根據我讀過的一些最佳實踐,類的靜態方法應該創建爲線程安全的,並且實例成員應該保證線程安全。

我想爲該類實現深度複製方法。該類本身有其他引用類型成員。有沒有辦法讓深拷貝方法線程安全,而不需要在類的所有實例化成員上施加開銷?

回答

0

至於克隆,堆棧溢出已經有了很好的答案。

Deep cloning objects

爲線程安全的,我會想象的唯一保證是如果您在複製過程中把周圍的成員變量鎖。

更新:

好吧,我已經做了一些研究。我認爲確保成員線程安全的最優雅的方式是調用線程鎖定對象而不是嘗試在類中實現它。另外,實現ICloneable接口,然後您可以輕鬆完成整個對象的二進制副本。請參閱上面張貼的鏈接中的答案。當然,你仍然可以輕鬆地在你的類中爲你的靜態成員實現鎖定。

+0

而且我必須假設把鎖放到任何地方都會有很大的性能損失。 – Tim 2011-05-19 02:03:46

+0

嗯,我的意思是,你可以只在你的克隆方法裏面放置對象周圍的鎖。然後,唯一的成本將在複製過程中。 – 2011-05-19 02:05:13

+0

但是你是否也需要鎖定所有你的getters/setters? – Tim 2011-05-19 02:06:21