不好意思坑了你哈,dst_release没有bug,不存在竞争条件, 根源是我错误的理解了atomic_dec_return, 详情看我10楼的分析。 回复 5# mnipxh
恩,应该是这个原因,但是因为一开始我就认准了是atomic_dec_return导致的问题,导致我判断错误,没有进一步分析根源。 回复 8# smalloc
恩,只要等于0的路径执行过就行了, 后面有没有负数没什么问题。 回复 9# amarant
谢谢支持, 其实我这个贴就是个反面教材哈哈, 没有深入的调查研究就上来发帖, 实在是不好意思。 atomic_dec_return其实就是文如起名, 它能够保证“递减和返回”整体是一个原子操作,
如果把:
newrefcnt = atomic_dec_return(&dst->__refcnt);
换成:
atomic_dec(&dst->__refcnt);
newrefcnt = dst->__refcnt;
就会存在我说的那个竞争条件了
页:
1
[2]