Re[3]: void f(boost::shared_ptr<X> const& p);
От: remark Россия http://www.1024cores.net/
Дата: 29.12.09 12:45
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>>>Как вообще бороться с оверхедом на подсчёт ссылок и стоит ли?


R>>*Может* стоить. Стоит ли в конкретном случае — скажет только профайлер.


AG>Профайлер скажет. Вопрос в том, что писать до тех пор, пока профайлер не потребовался, чтобы не пессимизировать преждевременно.


Если так, то стоит, дабы не пессимизировать преждевременно.


AG>>>Кстати, в Delphi для типов, для которых подсчёт ссылок встроен в компилятор, всё просто и без увеличения уровня косвенности:


R>>Зачем при обычном вызове функции надо менять счётчик 2 раза? Разве вызывающий код может освободить счётчик до возврата из функции?


AG>т.к. переданы I и S "по значению", в самой вызывающей функции этим переменным могут присваиваться другие значения, при присвоении, как обычно счётчик ссылок правой части увеличивается, затем левой уменьшается. Для балланса необходимо это неявное увеличение/уменьшение счётчика ссылок на входе/выходе.

AG>при передаче "по константному значению" возможность присвоение переменной нового значения отсутствует.

Сделали поддержку в компляторе, и так облажались


AG>наверное, можно было бы в boost::shared_ptr предусмотреть на этот случай класс, который вёл бы себя как shared_ptr без =, reset и swap, который бы не дёргал счётчик ссылок. но у boost::shared_ptr приоритеты — корректность и единообразие, а не оптимальность и настраиваемость.


По-хорошему нужен указатель, который поддерживает одновременные обращения из разных потоков (то, что сейчас вынесено в отдельные atomic_* функции); указатель, который не поддерживает обращения из разных потоков, но поддерживает разделение объекта между потоками (текущий shared_ptr); однопоточный указатель (нет в boost), и умный указатель для передачи как параметр в функции и возвращения из функций (по сути — просто обёртка над указателем).
Тогда можно было бы точно подбирать требуемый вариант, не компромитируя единообразие синтаксиса.


AG>


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.