swmr_barrier/
lib.rs

1#![no_std]
2mod sys;
3
4/// **Heavy Barrier**
5///
6/// Used for the cold path (Writer).
7///
8/// * **Best Case**: Calls OS API to forcibly flush all CPU caches (Linux PrivateExpedited / Windows FlushProcessWriteBuffers).
9/// * **Fallback**: Degrades to `fence(Ordering::SeqCst)`.
10///
11/// ---
12///
13/// **重型屏障 (Heavy Barrier)**
14///
15/// 用于冷路径(Writer)。
16///
17/// * **最佳情况**:调用 OS API 强制刷新所有 CPU 缓存 (Linux PrivateExpedited / Windows FlushProcessWriteBuffers)。
18/// * **回退情况**:退化为 `fence(Ordering::SeqCst)`。
19#[inline]
20pub fn heavy_barrier() {
21    sys::heavy_barrier_impl();
22}
23
24/// **Light Barrier**
25///
26/// Used for the hot path (Reader).
27///
28/// * **Best Case**: Generates only a `compiler_fence(SeqCst)`. Runtime overhead is practically zero.
29/// * **Fallback**: If the system does not support heavy barrier optimization, it must degrade to `fence(Ordering::SeqCst)` for safety.
30///
31/// ---
32///
33/// **轻型屏障 (Light Barrier)**
34///
35/// 用于热路径(Reader)。
36///
37/// * **最佳情况**:仅产生一个 `compiler_fence(SeqCst)`。运行时开销几乎为 0。
38/// * **回退情况**:如果系统不支持重型屏障优化,必须退化为 `fence(Ordering::SeqCst)` 以保证安全。
39#[inline]
40pub fn light_barrier() {
41    sys::light_barrier_impl();
42}
43
44/// **Check Acceleration Status**
45///
46/// Returns `true` if OS-accelerated barriers are in use.
47///
48/// * **Linux (Kernel 4.3+)**: Returns `true` if `MEMBARRIER_CMD_PRIVATE_EXPEDITED` (4.14+) or `MEMBARRIER_CMD_SHARED` (4.3+) is available.
49/// * **Windows (Vista+)**: Always returns `true`.
50/// * **Other platforms / Loom**: Always returns `false`.
51///
52/// ---
53///
54/// **检查加速状态**
55///
56/// 如果正在使用 OS 加速屏障,返回 `true`。
57///
58/// * **Linux (Kernel 4.3+)**:如果 `MEMBARRIER_CMD_PRIVATE_EXPEDITED` (4.14+) 或 `MEMBARRIER_CMD_SHARED` (4.3+) 可用,返回 `true`。
59#[inline]
60pub fn is_accelerated() -> bool {
61    sys::is_accelerated_impl()
62}