ev-stdexec-atomic-ref-submission-ring-002¶
| 字段 | 值 |
|---|---|
| 项目 | NVIDIA/stdexec |
| 固定 commit | 6d7ad689f4d4 |
| 路径 | include/exec/linux/io_uring_context.hpp |
| 行段 | L217-L226 |
| 特性 | std::atomic_ref |
| 许可证 | Apache-2.0 |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-26 |
| 测试代码 | 否 |
| 发现方式 | manual |
用法¶
把 mmap 得到的 io_uring 共享内存地址绑定到 atomic_ref
为什么典型¶
内核与用户态共享的环形缓冲区不能用 std::atomic,atomic_ref 在原地对普通 __u32 提供原子操作。
摘录¶
explicit __submission_queue(memory_mapped_region const & __region,
memory_mapped_region const & __sqes_region,
::io_uring_params const & __params)
: __head_{*__at_offset_as<__u32*>(__region.data(), __params.sq_off.head)}
, __tail_{*__at_offset_as<__u32*>(__region.data(), __params.sq_off.tail)}
, __array_{__at_offset_as<__u32*>(__region.data(), __params.sq_off.array)}
, __entries_{static_cast<::io_uring_sqe*>(__sqes_region.data())}
, __mask_{*__at_offset_as<__u32*>(__region.data(), __params.sq_off.ring_mask)}
, __n_total_slots_{__params.sq_entries}
{}
备注¶
生产路径;atomic_ref 构造自 io_uring 提交队列的 head/tail 偏移。