c # Thread Safe Deep Copy - PullRequest
       39

c # Thread Safe Deep Copy

8 голосов
/ 19 мая 2011

Я читал много других вопросов, а также много поисков в Google, и я не смог найти четкого решения.

Исходя из прочитанного мною передового опыта, статические методы класса должны создаваться потокобезопасными, а члены экземпляра должны обеспечивать безопасность потоков для потребителей.

Я хотел бы реализовать метод глубокого копирования для класса. Сам класс имеет другие члены ссылочного типа. Есть ли способ сделать поток глубокого копирования потокобезопасным без необходимости накладывать накладные расходы на все экземпляры класса экземпляра?

1 Ответ

0 голосов
/ 19 мая 2011

Что касается клонирования, переполнение стека уже имеет хороший ответ.

Глубокое клонирование объектов

Что касается безопасности потоков, я бы предположил, что единственная гарантия состоит в том, что вы устанавливаете блокировки вокруг переменных-членов во время копирования.

Обновление:

Хорошо, я провел небольшое исследование. Я думаю, что самый элегантный способ обеспечить безопасность потоков ваших членов - это чтобы вызывающие потоки удерживали блокировки на объекте, а не пытались реализовать его внутри вашего класса. Кроме того, реализуйте интерфейс ICloneable, и тогда вы сможете легко сделать двоичную копию всего объекта. Смотрите ответ в ссылке, которую я разместил выше. Конечно, вы все еще можете легко реализовать блокировки для ваших статических членов внутри вашего класса.

...