| |||
![]()
|
![]() ![]() |
![]()
Задумался, а вот нафига в имплементации shared_ptr используется именно спин-лок, а не мютекс? Подробнее. Конечно, по возможности shared_ptr использует атомарные операции над памятью, но если их нет, то вместо этого реализует критическую секцию через спин-лок. Спин-лок, между прочим, достается из пула спин-локов посредством хеширования адреса чего-то там, например, объекта на который указывает shared_ptr, не суть. Но всего в пуле только-то 41 спин локов. И теперь вопрос --- а почему ж не мютексы? Испугались, что мютексы могут быть медленнее? Вот как бы возможный вариант, я как-то года два назад проверял и вдруг оказалось, как мне припоминается, что под линуксом мютексы медленнее спин-локов могут быть. Не разобрался и почему. Испугались, что мютексы надо инициализировать, и не захотели заморачиваться изготовлением навороченных схем, гарантирующих, что они будут инициализированы ранее, чем использоваться? Как-то всё это оставляет ощущение недоделанности, то ли библиотеки, то ли языка, то ли синхронизаций. Т.е. я-то сам себе могу позволить подобный код писать, но в принципе для подобных задач должно существовать каноническое решение. |
||||||||||||||
![]() |
![]() |