170 похожих чатов

Разве std::atomic_shared_ptr<T> (который на самом деле std::atomic<std::shared_ptr<T>>) - это не

просто обертка над std::atomic_load/CES/...? кажется, там работы не должно быть много

8 ответов

6 просмотров

ну, реализация в фолли не особо тривиальная

Хорошо если мьютекс не лочит

Alexander-Karaev Автор вопроса
Constantine Drozdov
Хорошо если мьютекс не лочит

https://github.com/microsoft/STL/blob/main/stl/inc/memory#L3862-L3977

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

Alexander-Karaev Автор вопроса
magras
Чтобы тривиальная реализация работала, нужно уметь...

Так это всё уже умели std::atomic_load и его друзья, которые были до С++20 (https://en.cppreference.com/w/cpp/memory/shared_ptr/atomic)

Alexander Karaev
Так это всё уже умели std::atomic_load и его друзь...

Найди реализацию, у майков там мьютекс вроде был (как и в этой, похоже)

Alexander Karaev
Так это всё уже умели std::atomic_load и его друзь...

У них были какие-то подводные камни. Из головы не могу вспомнить.

Constantine Drozdov
Найди реализацию, у майков там мьютекс вроде был (...

тогда мьютекс должен был бы быть и просто в shared_ptr, т.к. раньше методы были

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
10
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Карта сайта