为Sparc V8实现比较和交换功能的内联汇编

时间:2012-02-20 10:59:27

标签: c gcc assembly sparc

我的gcc交叉编译器不支持Built-in functions for atomic memory access。我如何使用Sparc V8架构的内联汇编实现以下功能:

long __sync_val_compare_and_swap (long *ptr, long oldval long newval)
{
....
}

那些内置执行原子比较和交换。也就是说,如果* ptr的当前值是oldval,则将newval写入* ptr。

1 个答案:

答案 0 :(得分:2)

SPARC V8没有CAS指令,因此您必须以某种方式模拟它。例如。在http://www.oracle.com/technetwork/server-storage/solaris10/index-142944.html使用类似C的伪代码用于CAS,并使用静态pthread互斥锁来确保原子{}区域的原子性。