2017-01-18 5 views
0

Умный указатель представляет собой абстрактный тип данных, который имитирует указатель, предоставляя дополнительные функции, такие как автоматическое управление памятью или контроль границ.Являются ли интеллектуальные указатели потоками безопасными?

Вопрос в том, являются ли они потокобезопасными?

ответ

3

Различные объекты интеллектуального указателя обеспечивают различную степень безопасности потоков. Вы должны тщательно проверить документацию для индивидуальной реализации, чтобы узнать, какой уровень безопасности потоков он обеспечивает.

Наиболее распространенный вопрос касается, в частности, о std::shared_ptr и std::weak_ptr. Они обеспечивают стандартную безопасность потоков для отдельных экземпляров указателя. То есть один поток не должен иметь доступ к shared_ptr или weak_ptr, тогда как другой поток является или может быть изменен таким же shared_ptr или weak_ptr объектом. Тем не менее, они обеспечивают полную безопасность потоков для разных указателей, которые ссылаются на один и тот же объект. Таким образом, один поток может изменять shared_ptr, а другой поток обращается к shared_ptr тому же базовому объекту, чье время жизни управляется интеллектуальными указателями.

+0

Я полагаю, что безопасность потоков применима к разным экземплярам 'shared_ptr' (как вы говорите), но не к объекту, указанному в – LWimsey

+0

@LWime, да, это так. – Yakk