Комментарии 6
Ой, ну если бы так всё было просто... Язык Си - стековый. Если вы не работаете через указатели, то структура сначала бросится в стек одного потока, потом заблокируется до возврата из функции обработки...
Так что пример негодный. Тормозить существенно из-за процессора в данном случае код не будет.
То, что вы описываете — это поведение обычного синхронного вызова функции.
Но в многопоточности на Си это так не работает:
1. В примере структура counters объявлена глобально.
2. Даже если создавать потоки, вы физически не можете передать туда структуру по значению.
Так что в реальном многопоточном коде потоки работают параллельно с общим куском памяти, никаких "блокировок до возврата" там нет.
Бенч на 500000000 показал такое мне до этого.
False Sharing: 8.062 секунд
выравнивание: 0.977 секунд

Невидимый враг многопоточности: False Sharing и кэш-линии процессора