1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
[]
= "subms-spsc-ring-buffer"
= "0.5.2"
= "2024"
= "1.85"
= ["Kieran Smith <oss@submillisecond.com>"]
= "submillisecond.com cookbook recipe - concurrency: subms-spsc-ring-buffer. Wait-free SPSC ring buffer with cache-line padded counters and opposite-index caching; sub-50ns enqueue/dequeue on sibling cores."
= "MIT OR Apache-2.0"
= "README.md"
= "https://submillisecond.com/cookbook/recipes/subms-spsc-ring-buffer"
= ["spsc", "ring-buffer", "lock-free", "concurrency", "subms"]
= ["concurrency", "data-structures"]
[]
= "subms_spsc_ring_buffer"
= "src/lib.rs"
[[]]
= "perf_main"
= ["harness"]
[[]]
= "perf_features"
= ["harness", "bulk", "wait-strategies", "mpsc-fan-in", "mpmc-disruptor", "metrics"]
[]
= []
# Bench-harness wiring: `SubMsRecipe` impl + perf_main example.
= ["dep:subms"]
# ----- Opt-in feature catalog (subms 0.5+) -----
# Each feature lives in src/features/<name>.rs behind a #[cfg(feature)]
# gate. Base ring stays wait-free SPSC + zero-dep std-only; opt-ins add
# focused capabilities. Pick what you need:
#
# subms-spsc-ring-buffer = { version = "0.5", features = ["bulk"] }
# subms-spsc-ring-buffer = { version = "0.5", features = ["bulk", "wait-strategies"] }
#
# `bulk` - try_enqueue_bulk / try_dequeue_bulk amortise the
# per-item atomic ops behind a single fence per call.
# `wait-strategies` - blocking wrappers around the base producer/consumer
# that take a wait strategy (BusySpin / Yield / Park).
# `mpsc-fan-in` - N-producer 1-consumer demuxer over N independent
# SPSC rings. Each producer is still wait-free SPSC.
# `mpmc-disruptor` - LMAX-Disruptor-style multi-producer multi-consumer
# ring with sequence barriers + CAS claim. Independent
# of the base SPSC structures.
# `metrics` - per-instance counters: enqueue/dequeue success +
# fail, max depth, CAS retries (mpmc only).
= []
= []
= []
= []
= []
[]
= { = "0.5.2", = "../../../../subms/rust", = true }