Как Linux увеличивает счётчик без lock на SMP-системах — 18 июля 2026 г. в 20:30:05.369
Как Linux увеличивает счётчик без lock на SMP-системах В ядре Linux есть трюк, который выглядит почти слишком просто: не заставлять все CPU драться за одну переменную. Вместо общего счётчика используется per-CPU переменная - у каждого ядра своя копия данных. На x86 макрос this_cpu_inc(var) превращается в одну инструкцию incl, которая работает с областью данных текущего CPU через GS. Что это даёт: * нет общего lock * нет постоянной конкуренции между ядрами * инкремент выполняется локально для текущего CPU * операция получается быстрой и дешёвой Идея мощная: если данные можно разделить по CPU, не нужно синхронизировать каждый маленький апдейт между всеми ядрами. Так ядро экономит огромное количество лишней блокировки там, где код выполняется постоянно.

