В отсутствие многопоточности реализация копирования при записи для shared_ptr
(либо из boost, либо из tr1) с использованием unique()
проста. Какие изменения необходимо внести при многопоточности? Счетчик ссылок является атомарным, поэтому я предполагаю, что могу создавать, копировать-конструировать, читать и уничтожать экземпляры shared_ptr
без дальнейших проблем. Как насчет их обновления в целом и особенно при реализации копирования при записи? Нужны ли замки? Или использовать boost::atomic_store
(почему это не задокументировано)? Или ждать полностью атомарную версию shared_ptr
(не вариант)?
Редактировать:
sfossen, спасибо за ваш полезный ответ.
Итак, я заключаю, что если я изменяю объект, на который указывает, только после его отсоединения через COW, так что им владеет только текущий поток, блокировка не требуется и реализация COW выглядит точно так же, как однопоточная при использовании shared_ptr с атомарными счетчиками ссылок.