【发布时间】:2011-02-05 15:42:02
【问题描述】:
我有一些不可变的数据结构,我想使用引用计数来管理它们,在 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 atomic builtins。至于不变性,引用计数是唯一在对象的持续时间内改变的字段。
【问题讨论】:
-
澄清一下,我的兴趣更多是出于好奇,而不是出于对可行解决方案的需求。
标签: c multithreading atomic memory-barriers refcounting