Как мне безопасно записать структуру в память?Linux

Ответить
Anonymous
 Как мне безопасно записать структуру в память?

Сообщение Anonymous »

У меня есть базовая структура, состоящая только из атомов:

Код: Выделить всё

#[repr(C)]
struct Chunk {
size: AtomicU32,
flags: AtomicU32,
prev: AtomicPtr
}
В какой-то момент мне понадобится создать подобные структуры в необработанной памяти.
Пример:

Код: Выделить всё

(p as *mut Chunk).write(Chunk {
size: AtomicU32::new((size + size_of::()) as u32),
flags: AtomicU32::new(0),
prev: AtomicPtr::default() });

У меня есть блокировка для раздела памяти, поэтому запись возможна, но мне интересно, может ли запись оказаться в кеше, а распространение на другие кеши произойдет тогда в «случайное» время , возможно, после снятия блокировки. Или это решается тем, что члены структуры являются атомарными и все загрузки с Ordering::Acquire уже синхронизируют память?
Каков потенциальный способ избежать этого без использования ограничения памяти и без использования большинства библиотек (даже простые/встроенные в основном ограничены, так как у меня нет доступного распределителя, поэтому все, что использует кучу, просто выходит из строя).
Должен ли я создать структуру в памяти, а затем инициализировать каждого члена с помощью атомарного хранилища?
Я открыт для большинства предложений и критики относительно моей обработки памяти.
С уважением,
Лантанар

Подробнее здесь: https://stackoverflow.com/questions/792 ... -to-memory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»