Size: a a a

2021 March 11

YS

Yaroslav Syrytsia in pro.cxx
Dmitry Ulyumdzhiev
Порекомендуйте пожалуйста вводное описание как сделать atomic shared_ptr
А его разве уже нет в стандарте?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Не у всех последний стандарт
источник

V

Vladislav in pro.cxx
Ну там же Execute Around, нет?
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Ulyumdzhiev
Порекомендуйте пожалуйста вводное описание как сделать atomic shared_ptr
А разве атомарное чтение/запись для него появилась не вместе с самим shared_ptr?
источник

CD

Constantine Drozdov in pro.cxx
источник

DU

Dmitry Ulyumdzhiev in pro.cxx
Yaroslav Syrytsia
А его разве уже нет в стандарте?
есть, я скорее хотел описание алгоритма и сложностей для дебилов     :)
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
У майков оно уже вроде есть (судя по табличке на спр)
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Хотя на гитхабе я не вижу
источник

DU

Dmitry Ulyumdzhiev in pro.cxx
Dmitry Ulyumdzhiev
Порекомендуйте пожалуйста вводное описание как сделать atomic shared_ptr
криво написал. Я хотел спросить о том, как устроен сам алгоритм\код (а не как пользоваться\где достать atomic_shared_ptr :))
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Ulyumdzhiev
криво написал. Я хотел спросить о том, как устроен сам алгоритм\код (а не как пользоваться\где достать atomic_shared_ptr :))
я открыл реализацию MSVC и там написаны интересные слова _Lock_shared_ptr_spin_lock
источник

CD

Constantine Drozdov in pro.cxx
думаю, они достаточно объясняют, как это реализовано :)
источник

DF

Dollar Føølish in pro.cxx
А что защищает сий спинлок ?
источник

DF

Dollar Føølish in pro.cxx
Ведь вроде достаточно атомика в контрол блоке ?
источник

AG

Andrey Glebov in pro.cxx
_Shared_ptr_spin_lock это для старых функций atomic*(std::shared_ptr<...> *...)
в c++20 добавили настоящую специализацию std::atomic<std::shared_ptr<T>>.
она ниже по файлу <memory> у них.
лучше она тем, что НЕ использует глобальный spinlock, хотя реализация всё-равно не lock-free (вроде из-за того, что не везде есть double-compare-and-exchange, но тут могу ошибаться)
источник

DU

Dmitry Ulyumdzhiev in pro.cxx
Andrey Glebov
_Shared_ptr_spin_lock это для старых функций atomic*(std::shared_ptr<...> *...)
в c++20 добавили настоящую специализацию std::atomic<std::shared_ptr<T>>.
она ниже по файлу <memory> у них.
лучше она тем, что НЕ использует глобальный spinlock, хотя реализация всё-равно не lock-free (вроде из-за того, что не везде есть double-compare-and-exchange, но тут могу ошибаться)
я правильно понял, что суть в том, что такая инструкция нужна чтобы не получить гонку с указатель+счетчик?
источник

DU

Dmitry Ulyumdzhiev in pro.cxx
То есть нужно одновременно делать атомарную операцию на указатель+счетчик.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Ulyumdzhiev
я правильно понял, что суть в том, что такая инструкция нужна чтобы не получить гонку с указатель+счетчик?
да, суть в том, что невозможно гарантировать, что shared_ptr жив
источник

AG

Andrey Glebov in pro.cxx
Dmitry Ulyumdzhiev
То есть нужно одновременно делать атомарную операцию на указатель+счетчик.
всё верно - на x64 есть cmpxchg16b например
источник

CD

Constantine Drozdov in pro.cxx
Andrey Glebov
всё верно - на x64 есть cmpxchg16b например
не поможет - нужно атомарно провести операцию над p и *p
источник

DU

Dmitry Ulyumdzhiev in pro.cxx
Constantine Drozdov
да, суть в том, что невозможно гарантировать, что shared_ptr жив
Спасибо
источник