Извините, если это очень просто. Это упрощенная версия того, что я делаю. Я пишу модуль ядра. Когда он будет работать, будет два потока одного двух разных физических CPU. Я использую глобальную переменную для выполнения определенной связи между этими потоками. Странно то, что иногда писать одним потоком просто не видно другим. Что может быть причиной?Почему значение, написанное одним процессором, не видно другому?
Я подозреваю, что это связано с защитой памяти и, возможно, с синхронизацией с кешем, поэтому я попытался использовать smp_wmb() после записи, но, похоже, это не помогает. И насколько я знаю, я не могу явно контролировать синхронизацию кеша. Поэтому я немного застрял.
Любые идеи?
EDIT: уточнить, что описание является упрощенной версией.
Может быть много чего. Поскольку модуль ядра заставляет меня предполагать C, вы объявили переменную volatile? –
@GabeSechan Да, я пробовал это. – TFC
Следуйте шаблонам, которые использует другой код ядра. Кроме того, если вы не делаете что-то невероятно необычное, барьер записи должен быть до записи. Какое значение передает это значение? –