无锁并发

Rust 也支持原子类型,其内存顺序模型与 C++ 20 相同。


P.MTH.lockfree.01 除非必要,否则建议使用同步锁

【描述】

不要认为无锁编程性能就一定高,并且需要注意的地方比使用同步锁都多,比如 指令重排 、ABA 问题、 内存顺序是否指定正确等。

正确实现无锁编程比使用同步锁要困难很多。所以,除非有必要,否则直接使用同步锁就可以。

也有一些 性能测试 作为参考,原子类型的性能比互斥锁的性能大概要好四倍左右。所以,当在同一个临界区内要有超过四次原子操作,也许使用互斥锁更加简单一些。

P.MTH.lockfree.02 如有必要使用无锁编程,那么内存顺序可以默认使用 Ordering::SeqCst

【描述】

使用 Ordering::SeqCst 内存顺序更加安全一些,并且性能在一般情况下够用,除非性能不够用,想进一步压榨性能的时候,再去考虑合理使用其他内存顺序。