почему std :: shared_ptr использует атомарные операции с процессором - PullRequest
11 голосов
/ 24 января 2012

У меня проблема с пониманием того, почему shared_ptr использует инструкции атомарного процессора ... Я не могу выяснить причины, потому что он НЕ является потокобезопасным.Может кто-нибудь объяснить, пожалуйста.

Если вам интересно, знаете, откуда я знаю, что он использует атомарные интрузии: был клип из C ++ и далее, где Херб и Андрей говорят об этом, но они никогда не упоминают причины, почему это так.что.

Ответы [ 2 ]

15 голосов
/ 24 января 2012

Любой экземпляр shared_ptr является многопоточным.Данные, на которые он указывает, не являются многопоточными.См. this .

При правильном применении атомарные инструкции (защита осуществляется в том же порядке путем конкурирующего доступа к потоку) - один из способов обеспечения безопасности потока.Другой способ заключается в использовании мьютексов.

См. Аналогичный вопрос для BOOST: Безопасен ли boost shared_ptr xxx thread?

2 голосов
/ 13 января 2014

Херб Саттер только что использовал shared_ptr в качестве хорошего примера в своей статье 95, он идет туда, чтобы проработать проектное решение:
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/

...