0

Каждое ядро ​​процессора может иметь свой собственный кеш. Кэш записывает и просматривает. Если два потока выполняются на разных ядрах и синхронизируются семафорами, может случиться так, что при чтении кеш-памяти они имеют другую версию этого местоположения или они как-то прозрачно синхронизируются процессором? Меня интересуют x86 и RISC.Кэш, синхронизированный между ядрами

+1

Семафоры не являются аппаратной функцией и реализованы по-разному на разных языках. На каком языке и в библиотеке вы имеете в виду? –

+0

@AlexeiKaigorodov Я рассказал о семафорах только для того, чтобы указать, что * время выполнения * строк кода синхронизировано правильно. Я действительно заинтересован в том, синхронизирован ли кеш прозрачно для программиста. Если нет, есть ли какие-либо команды сборки для его синхронизации, и если типичный язык говорит, что C++ и библиотека потоков (windows или linux) используют эту команду для синхронизации, например. при вызове функций семафора. – Trismegistos

ответ

0

Каждая машина SMP, которую вы, скорее всего, используете, имеет когерентность кэша, реализованную в аппаратном обеспечении.

0

Согласно Linux документации (https://www.kernel.org/doc/Documentation/memory-barriers.txt): для а кэши, как ожидается, будет когерентным, нет гарантии, что когерентность будут упорядочены. Это означает, что в то время как изменения, сделанные на одном процессоре, будут в конечном итоге станут видимыми на всех процессорах, нет гарантии, что они будут станут очевидными в том же порядке на этих других процессорах.

Смежные вопросы