Rust原子序列

Rust
535
0
0
2022-11-16
  • Rust原子操作操作有5中内存顺序: Relaxed Release Acquire AcqRel SeqCst
  • Relaxed 没有内存顺序约束, 仅仅是原子类型的store/load操作是原子操作, 即针对该原子类型的在不同线程之间的操作顺序是任意的;
  • ReleaseAcquire是在不同的线程间针对同一原子类型对象的进行storeload操作时配合使用. 当一个线程storewithRelease写原子类型对象, 而有另一个线程loadwithAcquire度原子类型对象时, 那么在写及写之前的所有写原子操作都是发生在另一个线程中读该原子类型之后的所有读原子操作之前. 简而言之就是, Release之前的原子操作先于Acquire之后的原子操作;
  • AcqRelRelease Acquire的效果一样, 只不过是读的时候使用Acquire顺序, 写的时候使用Release顺序;
  • SeqCst 若某一原子类型对象在不同线程中使用SeqCst读写, 那么该原子操作之前的所有读写原子操作都先于该原子操作之后的读写操作