原子共享指针atomic_shared_ptr

atomic_shared_ptr{

mutable AtomicStruct<PackedPtr, Atom> ptr_;//前48位存共享指针的指针,16位存计数

}

 

获取指针函数是load

SharedPtr load(std::memory_order order = std::memory_order_seq_cst) const

noexcept {

auto local = takeOwnedBase(order);

return get_shared_ptr(local, false);

}

takeOwnedBase会用CAS的方式给后16位计数加1.重新赋值指针

然后获取共享指针的指针

 

如果count 已经超过EXTERNAL_OFFSET / 2;,会在共享指针上加1

// Check if we need to push a batch from local -> global

auto batchcount = EXTERNAL_OFFSET / 2;

if (get_local_count(newlocal) > batchcount) {

CountedDetail::inc_shared_count(newlocal.get(), batchcount);

putOwnedBase(newlocal.get(), batchcount, order);

}

 

set共享指针是store函数

void store(

SharedPtr n,

std::memory_order order = std::memory_order_seq_cst) /* noexcept */ {

auto newptr = get_newptr(std::move(n));

auto old = ptr_.exchange(newptr, order);

release_external(old);

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值