我需要自己用基於GCC 3.4的彙編語言編寫__sync_fetch_and_sub
原子操作的實現,它沒有__sync_fetch_and_sub
內建函數。但我對裝配知之甚少。如何在基於Linux GCC的彙編語言中實現__sync_fetch_and_sub原子操作GCC
任何人都可以幫助我嗎?任何幫助將不勝感激!!
這裏是__sync_fetch_and_add
inline unsigned int __sync_fetch_and_add(volatile unsigned int* p, unsigned int incr)
{
unsigned int result;
__asm__ _volatile_ ("lock; xadd %0, %1" :
"=r"(result), "=m"(*p):
"0"(incr), "m"(*p) :
"memory");
return result;
}
__sync_fetch_and_add(int *ptr, int a_count)
是原子添加到A_COUNT ptr指向的變量實施。返回先前在內存中的值。
__sync_fetch_and_sub(int *ptr, int a_count)
是從ptr指向的變量中自動減去a_count。返回先前在內存中的值。
'__sync_fetch_and_add(ptr,-a_count)'不會做這項工作嗎? –
我以爲這不起作用,因爲第二個參數是unsigned int,所以如果我們傳遞-a_count,那麼傳遞的值將不會是我們想要的值。但現在我認爲這也適用於這種情況。謝謝。但我把另一個標記爲答案,因爲我想知道如何用匯編語言來實現它。 – Steve