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