У меня есть некоторые неизменные структуры данных, с которыми я бы хотел справиться, используя подсчет ссылок, разделяя их по потокам в системе 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 является единственным полем, которое изменяется в течение продолжительности объекта.