こちらの記事にあったので私はこんなコードを書いていましたという返信。
ttp://1978th.net/tech/promenade.cgi?id=68
インラインアセンブラです。
x86オンリーなのかもしれませんが私の場合は動作させる環境が固定なので。
static __inline__ void __attribute__ ((__always_inline__)) atomic_add(volatile int *pv1, int v2) { __asm__ volatile ( "lock; addl %1,%0" : "=m" (*pv1) : "ir" (v2), "m" (*pv1)); }
これを、
#if defined(_GCC) とかそういうマクロで判定して使ってます。
速度?そんなの知りません( ゚Д゚)y─┛~~