triple_buf_64
A cheap realtime-safe lock-free triple buffer data structure that stores 64 bits of data
On platforms which natively support 64 bit atomics, this is implemented with
a single cheap AtomicU64 load/store operation (this can optionally use
portable_atomic for maximum compatibility).
On platforms which do NOT natively support 64 bit atomics, this is implemented using a more expensive triple buffer implementation (using triple_buffer).
This can be useful when you want to pass a small amount of data between realtime threads (i.e. audio threads) very cheaply on most platforms, but also have a realtime-safe fallback for platforms which do not have 64 bit atomics (i.e. PowerPC).
This crate is no_std compatible and is implemented with zero unsafe code.
Example
// Construct an input/output pair with the given 64 bit type.
let = ;
// The output will read the initial value.
assert_eq!;
assert_eq!;
// Write new data into the buffer.
input.write;
assert_eq!;
assert_eq!;
input.write;
input.write;
input.write;
// The output always reads the latest value that was pushed to the buffer.
assert_eq!;
assert_eq!;
Data Types
This triple buffer accepts any data type that implements the [Data64Bit]
trait. Implementations for the following primitives are provided:
u64i64f64[u32; 2][i32; 2][f32; 2][u16; 4][i16; 4][u8; 8][i8; 8][bool; 8]
Crate Features
portable-atomic- (disabled by default) - Enables the use of the portable_atomic crate for maximum 64 bit atomic compatibility.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.