2011-10-07 131 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擴展。這樣任何人都可以使用你的程序,不管他們的系統多麼模糊,只要他們願意使用一個足夠現代的編譯器。 –