7个版本

0.2.2 2023年8月19日
0.2.1 2023年1月15日
0.2.0 2022年8月3日
0.1.3 2022年2月26日
0.0.0 2022年1月29日

并发中排名第586

每月下载量22

Apache-2.0 OR MIT

45KB
393

atomic-memcpy

crates.io docs.rs license rustc build status

字节级原子memcpy。

这是在Rust中实现C++ "P1478: 字节级原子memcpy"的尝试。

这预计将允许实现Seqlock和Chase-Lev双端队列等算法,而不会出现数据竞争的UB。有关更多信息,请参阅P1478

状态

  • 如果正在复制的类型的对齐方式与指针宽度相同,则atomic_load可以在许多平台上产生与使用volatile读取 + atomic fence类似的大致汇编。例如,(例如,aarch64riscv64。有关更多信息,请参阅tests/asm-test/asm目录。
  • 如果正在复制的类型的对齐方式小于指针宽度,则性能可能会下降。然而,它以这种方式实现,不会至少在x86_64上引起极端的性能下降。(有关更多信息,请参阅atomic_load的实现注释)。可能在非x86_64平台上仍有改进的空间。
  • 对于正在复制的类型的对齐方式大于指针宽度的情况的优化尚未完全研究。可能仍有改进的空间。
  • 如果正在复制的类型包含指针,则它不与严格来源兼容,因为复制会进行ptr-to-int转换。
  • 如果正在复制的类型包含未初始化的字节(例如,填充)它是未定义的行为,因为复制会通过整数进行。这个问题可能要到支持类似AtomicMaybeUninit的东西才会解决。
  • portable-atomic:支持128位原子、原子浮点等可移植原子类型。使用字节级原子memcpy实现Seqlock,后者用于后备实现。
  • atomic-maybe-uninit:对可能未初始化的整数的原子操作。

许可证

本软件受Apache License, Version 2.0MIT许可证许可,您可选择其一。

除非您明确表示,否则根据Apache-2.0许可证定义,您提交的任何有意包含在作品中的贡献将按照上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~210KB