Обновить

Комментарии 6

Спасибо за дополнение, но статья преследует именно общий подход, а код и вовсе сишный.
Но я действительно не упомянул в статье, что нельзя хардкодить 64, это я поправлю.

Ой, ну если бы так всё было просто... Язык Си - стековый. Если вы не работаете через указатели, то структура сначала бросится в стек одного потока, потом заблокируется до возврата из функции обработки...
Так что пример негодный. Тормозить существенно из-за процессора в данном случае код не будет.

То, что вы описываете — это поведение обычного синхронного вызова функции.

Но в многопоточности на Си это так не работает:
1. В примере структура counters объявлена глобально.
2. Даже если создавать потоки, вы физически не можете передать туда структуру по значению.

Так что в реальном многопоточном коде потоки работают параллельно с общим куском памяти, никаких "блокировок до возврата" там нет.

Я имел ввиду, что пример не очень жизненный у вас. Всё таки кэш затем придуман, чтобы ускорять в первую очередь чтение (в том числе повторное чтение) одним потоком.
Но то, что проблема с пониманием работы аппаратуры есть, я не отрицаю.

Бенч на 500000000 показал такое мне до этого.
False Sharing: 8.062 секунд
выравнивание: 0.977 секунд

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации