LINUX.ORG.RU

История изменений

Исправление 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).