Автор статьи взял и замерил:
mutex, futex, горячий atomic-спинлок — что сколько реально стоит в тактах, и когда какой примитив выбрать.❗ Ключевые моменты статьи:
•
std::mutex — стабильные ~25 накладных тактов, но 40 байт памяти на объект•
futex через std::atomic wait/notify — ~14 тактов в удачном случае, но осторожно с contention• горячий спинлок — 2–4 такта накладных, однако может съесть всё ядро и заморозить владельца лока
Основной фокус — бенчмарк на реальных данных: пул 128 МБ мелких защищённых объектов, два конкурирующих потока, измерение влияния cache-line соседства и contention.
Спойлер из выводов:
unique_ptr<mutex> — неплохой безопасный дефолт, с которого не стыдно начать. А futex стоит рассматривать только если память давит и вы точно замерили свой contention — иначе легко получить проигрыш там, где ждали выигрыш.👉 Статья
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
