Почему boost::shared_ptr беспокоится об атомарном подсчете ссылок, когда он не является поточно-ориентированным?

Это скорее вопрос любопытства, но поскольку boost::shared_ptr не является потокобезопасным, зачем ему тогда использовать атомарный подсчет ссылок? Поскольку деструктор небезопасен для использования в потоках, я не вижу смысла.

Например, если вы передадите копию shared_ptr в поток, он всегда будет разрушаться, по крайней мере, когда поток завершится в самый последний момент.

1 ответ

Я думаю, что вы неправильно понимаете ограничения безопасности потоков общих указателей. Общий указатель сам по себе не является потокобезопасным в том смысле, что вы не хотите манипулировать одним и тем же указателем в двух разных потоках. Однако почти никогда не безопасно манипулировать одним и тем же объектом в двух разных потоках одновременно, и это не является поточно-ориентированным для большинства объектов.

Совершенно поточно-ориентированное управление двумя разными общими указателями в двух разных потоках, даже если они указатели на один и тот же объект.

Например, поток может создать объект и общий указатель на него. Затем он может создать еще один общий указатель на этот же объект. Тогда один поток может манипулировать первым общим указателем, а другой поток может манипулировать вторым общим указателем. Когда последний из двух общих указателей (и любые дополнительные сделанные копии) исчезнет, ​​объект будет уничтожен.

Другие вопросы по тегам