## Rust 与 C 在 Linux 内核中的并发性 Linux 内核开发社区最近讨论了 C 和 Rust 代码之间并发数据访问的不同方法。内核大量使用 `READ_ONCE()` 和 `WRITE_ONCE()` 宏来实现无锁算法和设备内存访问,但这些宏缺乏全面的文档。一项旨在实现 Rust 等效功能的补丁遭到了反对。 Rust 开发者认为,不应直接镜像这些宏,而是倾向于使用更明确和精确的 `Atomic` crate 来定义并发保证。他们认为 `READ_ONCE()`/`WRITE_ONCE()` 是“权宜之计”,掩盖了意图,更喜欢在指定原子操作时保持清晰。 虽然 Rust 补丁已被撤回,但这场争论促使现有的 C 代码得到了有价值的改进。它揭示了需要 `WRITE_ONCE()` 的实例以及缺失的 `READ_ONCE()` 调用,从而引发了更新。这种差异可能导致 Rust 和 C 在访问相同数据时采用截然不同的并发处理方式,从而可能使开发复杂化。这场讨论引发了一个问题:Rust 的优越设计是否应该影响 C 端的改进,尽管这将是一项巨大的工程。