请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

删除屏障例子问题

删除屏障的这个例子,感觉插入屏障也可以解决,还是没有理解删除屏障的意义。可以进一步解释一下吗?

正在回答 回答被采纳积分+3

1回答

Moody 2022-08-07 00:01:49
确实是这样,我感觉可能是两种屏障出现的时间有先后,都保留下来了。
0 回复 有任何疑惑可以回复我~
  • 好像是因为为了解决标记开销,栈上不会触发插入屏障(因为协程栈非常多,所以经常发送引用改变),当一个对象被堆对象删除引用的时候即使栈上有对象引用了它也不会触发屏障,所以需要删除屏障来保证不会误删。
    回复 有任何疑惑可以回复我~ 2022-08-10 00:34:31
  • Moody 回复 慕仔9573397 #2
    你说的这个更有道理
    回复 有任何疑惑可以回复我~ 2022-08-10 10:41:02
  • 为什么混合使用 难道不是 下面这个问题吗 
    多个协程 同时执行的时候, 其中一个 删除了一个对象
    而 GC 已经标记完成了 导致 被删除的对象仍被标记活着的错误情况
    所以删除屏障会在对象删除前打上一个标记,告诉GC此对象待删除  
    而插入屏障 是做不了这块逻辑的
    
    如果我的理解没有问题  请肯定我   
    如果我的理解有问题,请纠正我  
    不回复会让我感到疑惑
    回复 有任何疑惑可以回复我~ 2023-07-12 15:27:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信