Вот некоторые фрагменты кода.
std::shared_ptr<int> global(new int(1));
void swapper(int x)
{
std::shared_ptr<int> sp(new int(x));
global.swap(sp);
}
Предположим, что я хотел вызвать swapper
в параллельных потоках. Будет ли это потокобезопасным?
Я знаю об этом . Он показывает, как назначение указателя не является потокобезопасным, если я переназначаю значение global
.
Мой вопрос в том, что функция-член swap
сама по себе является потокобезопасной.
С одной стороны, функции блока управления shared_ptr являются потокобезопасными. С другой стороны, я предполагаю, что я перемещаю указатели на блоки управления, поэтому он не должен быть потокобезопасным.
Какая там связь? Безопасен ли поток swap
?