|
|
@ -159,6 +159,7 @@ X = 2; }
|
|
|
|
|
|
|
|
|
|
|
|
#### 限定内存顺序的5个规则
|
|
|
|
#### 限定内存顺序的5个规则
|
|
|
|
在理解了内存顺序可能存在的改变后,你就可以明白为什么Rust提供了`Ordering::Relaxed`用于限定内存顺序了,事实上,该枚举有5个成员:
|
|
|
|
在理解了内存顺序可能存在的改变后,你就可以明白为什么Rust提供了`Ordering::Relaxed`用于限定内存顺序了,事实上,该枚举有5个成员:
|
|
|
|
|
|
|
|
|
|
|
|
- **Relaxed**, 这是最宽松的规则,它对编译器和CPU不做任何限制,可以乱序
|
|
|
|
- **Relaxed**, 这是最宽松的规则,它对编译器和CPU不做任何限制,可以乱序
|
|
|
|
- **Release**,设定内存屏障(Memory barrier),指定屏障之前的数据不能被重新排序
|
|
|
|
- **Release**,设定内存屏障(Memory barrier),指定屏障之前的数据不能被重新排序
|
|
|
|
- **Acquire**, 设定内存屏障,指定屏障之后的数据不能被重新排序,往往和`Release`在不同线程中联合使用
|
|
|
|
- **Acquire**, 设定内存屏障,指定屏障之后的数据不能被重新排序,往往和`Release`在不同线程中联合使用
|
|
|
|