2011-10-07 80 views
2

__sync_val_compare_and_swap功能的替代我已经在我的项目下面的方法:旧的gcc编译器

long compare(long* avar, long comp, long exc) 
{ 
    return __sync_val_compare_and_swap(avar, comp, exc); 
} 

但是,如果我想编译使用的版本的GCC(旧版本,3.4.3为例)我的项目不支持AtomicBuiltins解决方案的替代路径是什么?什么样的替代函数(替代__sync_val_compare_and_swap)或我们可以使用的函数块而不是__sync_val_compare_and_swap?

回答

2

我会看到的唯一选择是你必须通过汇编来实现这一点。我认为gcc的asm扩展早于石器时代,所以你可能嵌入的任何编译器都会支持这一点。

实现这个特殊的功能并不难,而且你会很容易地找到引用。不过,您必须为每个您关心的架构提供不同的实现。

+2

简单而有礼貌的方法是使用内联asm来处理您认识并正式支持的arch,并且回退到所有其他gcc 4扩展。这样任何人都可以使用你的程序,不管他们的系统多么模糊,只要他们愿意使用一个足够现代的编译器。 –