Спинлоки быстрее, когда они не блокируются, поэтому они полезны в ситуациях, когда в блокировке очень низкий уровень конкуренции (т. Е. Очень низкая вероятность того, что она уже заблокирована).
Когда потокпереходит в спящий режим, вызывая переключение контекста (т. е. этот поток заменяется другим, чтобы другой поток мог работать).Обычно для получения стандартного мьютекса накладные расходы выше, чем для проверки, свободен ли спин-блокировка.Очень часто для спин-блокировок требуется только одна атомарная операция, когда блокировка свободна.
Эти свойства делают спин-блокировки полезными для мелкозернистой блокировки, поскольку использование меньших блокировок уменьшает конфликт на каждой блокировке.Например, в одном из моих проектов есть карта с ~ 200 000 записей, к которым одновременно получают доступ более 16 потоков (тип корпоративного сервера).Наличие спин-блокировки для каждой записи довольно эффективно, потому что вероятность того, что два потока в этом приложении попытаются попасть в одну и ту же запись одновременно, невелика.