У меня есть этот кусок коды C:Как выполнить небольшой фрагмент кода C атомарного
// ... many stuff here ...
if (((*(ptr + 0xffce)) & 3)) {
*(ptr + 0xffce) |= 3;
*(ptr + 0xd415) = 1 << var;
}
// ... many stuff here ...
где некоторые биты становятся логически связаны между собой и значением результата записывается в память.
Для моей программы очень важно, чтобы процессор не был поврежден во время выполнения этой части программы. Поэтому он должен быть выполнен атомал и вести себя так, чтобы блок кода был неделимым. Планировщику разрешается только отвлекать процессор до или после этого блока if
.
Как достичь этого на нормальном экосистема Linux (с программой пользовательского пространства)?
РЕДАКТИРОВАТЬ: комментарии ниже указывают на то, что выполнение кода может оказаться невозможным, при этом CPU не может быть отвлечен планировщиком. Противоположный вопрос: - это вообще возможно достичь этой цели и что мне нужно сделать для этого?
Использовать мьютексы? Таким образом, код пространства пользователя не может видеть память в несогласованном состоянии. –
@KerrekSB Это не предотвратит перепланирование, AFAIK .. –
@EugeneSh .: Нет, это не так, но из пользовательского пространства это все, что вы можете попросить. Планировщик не является тем, чье существование вы можете доказать из пользовательского пространства. –