Как мне безопасно записать структуру в память?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

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