Зачем нужен предел порядка памяти на счетчике ссылок?
В примереboost::atomic
,unref
функция:
void intrusive_ptr_release(const X * x)
{
if (x->refcount_.fetch_sub(1, boost::memory_order_release) == 1) {
boost::atomic_thread_fence(boost::memory_order_acquire);
delete x;
}
}
1: операция fetch_sub ограниченаmemory_order_release, что предотвращает переупорядочение предыдущих операций после точки. Но каковы возможные сцены, которые будут иметь такое явление?
2: в дополнение кmemory_order_release на атомной опера, почему есть дополнительныйmemory_order_acquire до удаления?