История изменений
Исправление KivApple, (текущая версия) :
Она есть на уровне процессора.
Вы можете свапнуть два указателя атомарно на уровне железа.
Вы можете декрементировать счётчик ссылок и узнать что там теперь ноль (и значит никто уже не сможет его инкрементировать, вы были последним владельцем) атомарно на уровне железа.
shared_ptr, intrusive_ptr возможно реализовать без блокировок (кроме самого malloc/free). Но shared_ptr кое где не умеет в swap без блокировок из-за двойного размера. А на swap строятся некоторые lock free паттерны.
Исправление KivApple, :
Она есть на уровне процессора.
Вы можете свапнуть два указателя атомарно на уровне железа.
Вы можете декрементировать счётчик ссылок и узнать что там теперь ноль (и значит никто уже не сможет его инкрементировать, вы были последним владельцем) атомарно на уровне железа.
shared_ptr, intrusive_ptr возможно реализовать без блокировок (кроме самого malloc/free). Но shared_ptr кое где не умеет в swap без блокировок из-за двойного размера.
Исправление KivApple, :
Она есть на уровне процессора.
Вы можете свапнуть два указателя атомарно на уровне железа.
Вы можете декрементировать счётчик ссылок и узнать что там теперь ноль (и значит никто уже не сможет его инкрементировать, вы были последним владельцем) атомарно на уровне железа.
shared_ptr, intrusive_ptr возможно реализовать без блокировок (кроме самого malloc/free).
Исходная версия KivApple, :
Она есть на уровне процессора.
Вы можете свапнуть два указателя атомарно на уровне железа.
Вы можете декрементировать счётчик ссылок и узнать что там теперь ноль (и значит никто уже не сможет его инкрементировать, вы были последним владельцем) атомарно на уровне железа.
shared_ptr, untrusive_ptr возможно реализовать без блокировок (кроме самого malloc/free).