Описание тега lock-free

Общий термин для методов и алгоритмов синхронизации многопоточных сред или других форм распределенных систем без использования блокировок.

Общий термин для методов и алгоритмов синхронизации многопоточных сред или других форм распределенных систем без использования блокировок.

Необходимость в программных архитектурах без блокировок возникает в основном из-за проблем с производительностью и масштабируемостью при использовании блокировок для синхронизации: использование блокировки требует, чтобы писатель исключил всех считывателей, но очень мелкозернистая блокировка (например, для каждого хеш-ведра) требует дополнительного хранилища и т. блокировка / разблокировка накладных расходов.

  • Джефф Прешинг " Введение в программирование без блокировок" - хорошая отправная точка, особенно в c / C++ с использованием stdatomic (дополнительные ссылки см. В вики- странице этого тега).

  • Практическим примером является хеш-таблица без блокировок для многопоточных программ C++, работающих на оборудовании SMP. Для этого требуются только широко поддерживаемые атомарные операции: загрузка, сохранение или чтение-изменение-запись (например, сравнение и замена) одного места.

  • Может ли num++ быть атомарным для int num?: Почему операции чтения-изменения-записи не являются атомарными, даже если они компилируются в одну инструкцию asm, и как все это работает в ассемблере.


Аппаратная транзакционная память - это более мощная системная архитектура для программирования без блокировок, позволяющая группировать несколько операций (даже по разным адресам) в одну атомарную операцию. (Вариант программного обеспечения STM может использовать блокировки для синхронизации). HTM поддерживается последним (2015/2016) оборудованием x86.

См. Также " Связь последовательных процессов" и " Инструкция по сравнению и замене".