C++ Academy: post #1532 — TG.ME

Как Linux увеличивает счётчик без lock на SMP-системах

В ядре Linux есть трюк, который выглядит почти слишком просто: не заставлять все CPU драться за одну переменную.

Вместо общего счётчика используется per-CPU переменная - у каждого ядра своя копия данных.

На x86 макрос this_cpu_inc(var) превращается в одну инструкцию incl, которая работает с областью данных текущего CPU через GS.

Что это даёт:

* нет общего lock
* нет постоянной конкуренции между ядрами
* инкремент выполняется локально для текущего CPU
* операция получается быстрой и дешёвой

Идея мощная: если данные можно разделить по CPU, не нужно синхронизировать каждый маленький апдейт между всеми ядрами.

Так ядро экономит огромное количество лишней блокировки там, где код выполняется постоянно.
🔥10❤‍🔥3👍3❤2
August 28, 2026 1.3K 1 9