Потокобезопасность std::shared_ptr
Утверждение, которое вы процитировали из MSDN относительно потокобезопасности std::shared_ptr, может быть неверно истолковано. Это означает, что, хотя несколько потоков могут одновременно читать и записывать отдельные объекты Shared_ptr, это не гарантирует безопасность изменения самого объекта Shared_ptr.
TL;DR:
Потокобезопасность std::shared_ptr касается только управления несколькими указателями, указывающими на один и тот же базовый объект. Он не распространяется на содержимое общего объекта или одновременную запись в экземплярshared_ptr.
Разбивка:
Внутренне общий_ptr состоит из двух компонентов:
Пример:
В фрагменте кода global — это общий указатель на объект конфигурации. Поток 1 копирует глобальный объект в свой общий указатель, закрытый. Если бы поток 2 впоследствии изменил глобальный, частный все равно будет указывать на исходный объект конфигурации, поскольку блок управления не изменяется. Однако если поток 2 назначит новый объект конфигурации глобальным, частный останется указателем на исходный объект.
Потокобезопасность указанных объектов:
Возможность безопасного изменение указанного объекта с помощью нескольких потоков зависит от реализации объекта. В случае вашего класса конфигурации, если он допускает одновременную запись без синхронизации, например добавление или удаление настроек, код не будет потокобезопасным.
Решение:
Чтобы обеспечить потокобезопасность при изменении объекта, используйте механизмы синхронизации, такие как std::mutex, для защиты доступа к объектуshared_ptr или самому общему объекту.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3