原子操作从硬件保证某些从语义上看起来需要多次操作的行为可以只通过一条处理器指令就能完成

这五个指令都是用来实现原子操作的,也就是在并发编程中保证线程安全的操作。

具体来说:

  1. 测试并设置(Test-and-Set)指令是指在执行写操作之前,先读取一个值,并将这个值和一个预设的值进行比较,如果相等,则将一个新值写入该位置。这个指令常用于实现锁的获取操作,通过原子地测试并设置一个标志位,判断锁是否被占用,并将锁的状态设置为占用。

  2. 获取并增加(Fetch-and-Increment)指令是指将一个内存位置的值加上一个给定的值,并返回加之前的原值。这个指令常用于实现计数器等数据结构,保证在并发修改时能够正确地增加计数器的值。

  3. 交换(Swap)指令是指将一个内存位置的值和一个给定的值进行交换,并返回原来的值。这个指令常用于实现互斥量(Mutex)等同步原语,可以保证在多个线程之间交换互斥量的状态,从而实现同步。

  4. 比较并交换(Compare-and-Swap,CAS)指令是指读取一个内存位置的值,与一个期望值进行比较,如果相等则将该位置的值更新为一个新值。CAS指令是实现乐观锁的基础,可以用来解决多个线程同时修改一个变量时出现的竞态条件问题。

  5. 加载链接/条件储存(Load-Linked/Store-Conditional,LL/SC)指令是一对指令,LL指令用来读取内存中的值,并在处理器缓存中建立一个链接,SC指令用来检查缓存中链接对应的内存位置是否被修改过,如果没有则将新值写入该位置。LL/SC指令是实现一些复杂同步原语的基础,例如基于事务的内存模型。

测试并设置(Test-and-Set) 和 比较并交换(Compare-and-Swap,CAS)

测试并设置(Test-and-Set)和比较并交换(Compare-and-Swap,CAS)两种操作都是用于实现同步原语的硬件支持指令,但它们是有区别的。

Test-and-Set操作会原子性地将指定的内存位置设置为“已锁定”,并返回该位置在操作前的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值