こちらの記事にあったので私はこんなコードを書いていましたという返信。
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─┛~~