我有一些不可变数据结构,希望使用引用计数来管理它们,在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原子内建函数。 至于不可变性,引用计数是对象在其生命周期中唯一更改的字段。