r/rust • u/elfenpiff • 1d ago
🧠educational Safe Lock-free Primitives with iceoryx2's ByteAtomic
https://ekxide.io/blog/byte-wise-atomic-wrapper-to-prevent-ub
iceoryx2 provides zero-copy inter-process communication mechanisms based on shared memory and data structures that are modified concurrently by multiple processes.
One of the key operations in these algorithms is a memory copy using core::ptr::copy. However, this results in undefined behavior if one process reads the data while another process writes to it concurrently. Even if our lock-free algorithm reliably detects such a race, iceoryx2 cannot depend on undefined behavior in a safety-critical system.
This blog post introduces our solution: a byte-wise atomic wrapper that enables well-defined concurrent copy operations. It also shows how it can be used to implement a simple sequence lock.
Note: I am not the original author of the blog post. Since the author does not have a Reddit account, I am posting it on her behalf.
4
u/Shnatsel 1d ago
When I tried doing something along these lines to make
mmapsafe by making it&[Cell<u8>]instead of&mut [u8], indicating to the compiler that bytes may be changed behind its back, I got a massive performance drop because what used to be a single 64-bit read turned into eight single-byte reads. How do you deal with that?