【问题标题】:Why CompareAndSwap is more of a powerful instruction than TestAndSet?为什么 CompareAndSwap 比 TestAndSet 更强大的指令?
【发布时间】:2013-10-28 05:57:24
【问题描述】:

请考虑下面的 CompareAndSwap 代码,让我知道为什么这个原子指令比作为互斥原语的原子 TestAndSet 更强大?

char CompareAndSwap(int *ptr, int old, int new) {
unsigned char ret;
// Note that sete sets a ’byte’ not the word
__asm__ __volatile__ (
" lock\n"
" cmpxchgl %2,%1\n"
" sete %0\n"
: "=q" (ret), "=m" (*ptr)
: "r" (new), "m" (*ptr), "a" (old)
: "memory");
return ret;
}

【问题讨论】:

  • @Acme 那么我们可以根据stackoverflow.com/questions/3659336/… 说我们对锁(标志值)的更新较少吗?如果我错了,请纠正我!那么,我们是在谈论更少更新的强大功能吗?
  • 它们的工作方式有根本的区别。在 CompareAndSwap 中,在获取相似值时会进行比较和更新,在 Test-and-set 中,旧值在写入新值后返回,Test -and-set 不会有最新信息,因此每次都会覆盖,而 CompareAndSwap 会,因此只有在值相同时才会写入。

标签: c locking mutual-exclusion compare-and-swap test-and-set


【解决方案1】:

test-and-set 修改内存位置的内容并将其旧值作为单个原子操作返回。

compare-and-swap 以原子方式将内存位置的内容与给定值进行比较,并且只有当它们相同时,才会将该内存位置的内容修改为给定的新值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多