mbarrier 0.1.3

Cross-platform memory barrier implementations for Rust, inspired by Linux kernel
Documentation
# mbarrier

[![CI](https://github.com/drivercraft/mbarrier/actions/workflows/build.yml/badge.svg)](https://github.com/drivercraft/mbarrier/actions/workflows/build.yml)
[![Crates.io](https://img.shields.io/crates/v/mbarrier.svg)](https://crates.io/crates/mbarrier)
[![Documentation](https://docs.rs/mbarrier/badge.svg)](https://docs.rs/mbarrier)

跨平台的 Rust 内存屏障实现,参考 Linux 内核设计。

## 特性

- 🚀 跨平台支持:x86/x86_64, ARM/AArch64, RISC-V
- 🔧 内核级实现:基于 Linux 内核的内存屏障设计
- 📦 无标准库依赖:适用于嵌入式和内核开发
- ⚡ 高性能:内联汇编实现,零开销抽象
- 🎯 SMP 感知:支持单处理器和多处理器环境
- ✅ 持续集成:在多种架构上进行测试验证

## 支持的架构

| 架构 | 状态 | 测试方式 |
|------|------|----------|
| x86_64 || 原生 + 交叉编译 |
| x86 (32-bit) || 交叉编译 |
| AArch64 || QEMU + 交叉编译 |
| ARM (32-bit) || QEMU + 交叉编译 |
| RISC-V 64 || QEMU + 交叉编译 |
| RISC-V 32 || 交叉编译 |

## 内存屏障类型

| 函数 | 描述 |
|------|------|
| `rmb()` | 读内存屏障 - 确保屏障前的读操作在屏障后的读操作之前完成 |
| `wmb()` | 写内存屏障 - 确保屏障前的写操作在屏障后的写操作之前完成 |
| `mb()` | 通用内存屏障 - 确保屏障前的所有内存操作在屏障后的操作之前完成 |
| `smp_rmb()` | SMP 读屏障 - 在 SMP 系统上等同于 rmb(),在 UP 系统上仅为编译器屏障 |
| `smp_wmb()` | SMP 写屏障 - 在 SMP 系统上等同于 wmb(),在 UP 系统上仅为编译器屏障 |
| `smp_mb()` | SMP 通用屏障 - 在 SMP 系统上等同于 mb(),在 UP 系统上仅为编译器屏障 |

## 使用示例

```rust
use mbarrier::*;

// 基本用法
fn example_basic() {
    // 读内存屏障
    rmb();
    
    // 写内存屏障
    wmb();
    
    // 通用内存屏障
    mb();
}

// 生产者-消费者模式
fn producer_consumer_example() {
    // 生产者
    unsafe {
        // 写入数据
        core::ptr::write_volatile(data_ptr, 42);
        
        // 写屏障确保数据写入完成
        wmb();
        
        // 设置标志
        core::ptr::write_volatile(flag_ptr, true);
    }
    
    // 消费者
    unsafe {
        // 读取标志
        if core::ptr::read_volatile(flag_ptr) {
            // 读屏障确保标志读取完成
            rmb();
            
            // 读取数据
            let value = core::ptr::read_volatile(data_ptr);
        }
    }
}
```

## 架构支持

### x86/x86_64

- `rmb()`: 编译器屏障(x86 系列读操作天然有序)
- `wmb()`: `sfence` 指令
- `mb()`: `mfence` 指令

### ARM/AArch64

- `rmb()`: `dmb ld` / `dsb ld` 指令
- `wmb()`: `dmb st` / `dsb st` 指令
- `mb()`: `dmb sy` / `dsb sy` 指令

### RISC-V

- `rmb()`: `fence r,r` 指令
- `wmb()`: `fence w,w` 指令
- `mb()`: `fence rw,rw` 指令

## 特性标志

- `smp` (默认启用): 启用 SMP 感知的屏障
- `std`: 启用标准库特性(预留)

## 性能考虑

- 所有屏障函数都是内联的,提供零开销抽象
- 在不需要的架构上,某些屏障可能被优化为无操作
- SMP 版本的屏障在单处理器系统上仅为编译器屏障

## 安全性

此库使用 `unsafe` 内联汇编来实现内存屏障。虽然这些操作在设计上是安全的,但请确保:

1. 正确理解内存屏障的语义
2. 在多线程环境中正确使用
3. 了解目标架构的内存模型

## 许可证

此项目采用 MIT 或 Apache-2.0 双许可证。

## 致谢

此实现参考了 Linux 内核的内存屏障设计,特别是:

- `arch/x86/include/asm/barrier.h`
- `arch/arm/include/asm/barrier.h`
- `arch/arm64/include/asm/barrier.h`
- `arch/riscv/include/asm/barrier.h`