参照カウントを使用して管理し、SMP システム上のスレッド間でそれらを共有したい不変のデータ構造がいくつかあります。
リリースコードは次のようになります。
void avocado_release(struct avocado *p)
{
if (atomic_dec(p->refcount) == 0) {
free(p->pit);
free(p->juicy_innards);
free(p);
}
}
atomic_dec
その中にメモリバリアが必要ですか?もしそうなら、どのようなメモリバリアですか?
追加メモ: アプリケーションは PowerPC と x86 で実行する必要があるため、プロセッサ固有の情報を歓迎します。GCC アトミックビルトインについてはすでに知っています。不変性に関しては、refcount はオブジェクトの存続期間中に変化する唯一のフィールドです。