这五个指令都是用来实现原子操作的,也就是在并发编程中保证线程安全的操作。
具体来说:
-
测试并设置(Test-and-Set)指令是指在执行写操作之前,先读取一个值,并将这个值和一个预设的值进行比较,如果相等,则将一个新值写入该位置。这个指令常用于实现锁的获取操作,通过原子地测试并设置一个标志位,判断锁是否被占用,并将锁的状态设置为占用。
-
获取并增加(Fetch-and-Increment)指令是指将一个内存位置的值加上一个给定的值,并返回加之前的原值。这个指令常用于实现计数器等数据结构,保证在并发修改时能够正确地增加计数器的值。
-
交换(Swap)指令是指将一个内存位置的值和一个给定的值进行交换,并返回原来的值。这个指令常用于实现互斥量(Mutex)等同步原语,可以保证在多个线程之间交换互斥量的状态,从而实现同步。
-
比较并交换(Compare-and-Swap,CAS)指令是指读取一个内存位置的值,与一个期望值进行比较,如果相等则将该位置的值更新为一个新值。CAS指令是实现乐观锁的基础,可以用来解决多个线程同时修改一个变量时出现的竞态条件问题。
-
加载链接/条件储存(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操作会原子性地将指定的内存位置设置为“已锁定”,并返回该位置在操作前的值。

最低0.47元/天 解锁文章
4554

被折叠的 条评论
为什么被折叠?



