Почему std:: shared_ptr, используя операции атомарного процессора
У меня проблема с пониманием того, почему shared_ptr использует инструкции атомарного процессора... Я не могу определить причины, потому что он НЕ является потокобезопасным.
Может кто-нибудь объяснить.
Если вам интересно узнать, как я знаю, что он использует атомарные intstuructions: был клип из С++ и за его пределами, о котором говорят Herb and Andrei, но они никогда не упоминают причины, почему это так.
Ответы
Ответ 1
Любой экземпляр shared_ptr
является многопоточным. Данные, которые он указывает, не являются многопоточными. См. this.
Атомные инструкции, если они правильно применяются (защита, выполненная в том же порядке путем конкурирующего доступа к потоку), является одним из способов обеспечения безопасности потоков. Другой способ - использование мьютексов.
См. аналогичный вопрос для BOOST: Безопасен ли поток shared_ptr xxx?
Ответ 2
Herb Sutter просто использовал shared_ptr как хороший пример в своем getw 95, он отправляется туда, чтобы разработать дизайнерское решение:
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/