17、Rust 原子同步原语与互斥锁实现

Rust 原子同步原语与互斥锁实现

1. 单线程与多线程程序顺序

Rust 不保证多线程程序的执行顺序,但确保单线程代码按文本顺序执行,即便优化后的 Rust 代码和底层硬件可能会对指令进行重排。当满足以下条件时,可认为操作 A 与操作 B 同步:
- 操作 B 是以 Acquire SeqCst 顺序从某个原子变量 WBS 进行加载。
- 操作 A 是以 Release SeqCst 顺序向同一原子变量 WBS 进行存储。
- 操作 B 读取到了操作 A 存储的值。

最后一点是为了防止编译器或硬件对操作 B 的加载进行优化。

2. 线性一致性与因果顺序

一个 Rust 结构可能遵循因果顺序,但在检查时不一定具有线性一致性。例如之前章节讨论的 Ring ,尽管因果顺序由互斥锁保护,但由于偏移量错误,写入操作可能会被覆盖。因此,确保程序的因果关系是编写适用的并发数据结构的必要但不充分条件。线性一致性是对数据结构操作的分析,而 happens-before / synchronizes-with 是操作内部和操作之间的顺序。

3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值