Не скажу за все реализации, но у atomic shared_ptr из folly есть свои проблемы. Простая итерация по односвязному списку построенному на таких указателях приведет к изменению всех указателей (точнее счетчиков, которые упакованы в старшие биты указателя). Два потока бегающие по списку уже будут мешать друг другу. Правда я не помню как работают hazard pointer'ы, так как из-за упоминания патентов выкинул их из головы.
Вы про указатель с атомарным счетчиком или про атомарный указатель ?
std::atomic<std::shared_ptr<T>> В folly оно кажется называется folly::atomic_shared_ptr<T>.
Всё упирается в производительность. 16 потоков работающие с одним atomic shared ptr будут мешаться друг другу на атомарном счётчике. В hazard ptr же нет атомарной модификации при чтении
* в hazard pointer нет rmw операций при чтении
Обсуждают сегодня