原子引用计数和自动引用计数有什么区别?

Jon*_*low 4 rust automatic-ref-counting swift

我看到ARC是不时使用的首字母缩写,但是例如在Rust中,它是“原子引用计数”,而在Swift或ObjC中,它们称为“自动引用计数”。到底有什么区别?据我所知,它们的行为方式似乎相同。

Mat*_* M. 5

这实际上是完全不同的。

  • atomic:来自原子性,它描述了一个步骤中执行的操作,也就是说,外部观察者看不到任何中间步骤:他们只能看到之前或之后的状态。
  • 自动的:指由机器完成或产生的意思。

在Rust方面,我们有ArcRc是引用计数指针:

  • Rc是准骨头引用计数指针:克隆它只会增加一个计数器,当最后一个Rc指向特定数据的指针被删除时,计数器将降至0,该数据也将被删除。
  • Arc是它的原子版本,这意味着它是线程安全的,并且可以在多个线程之间共享(与不同Rc)。

在Swift方面,ARC是指自动引用计数,Swift的垃圾收集机制,顾名思义是自动的(在代码中是不可见的)。

  • 一个问题仍然存在:Swift的引用计数是原子的吗?(我想一定是……?) (3认同)
  • 如果存在问题,它是线程安全的:http://stackoverflow.com/questions/13942226 (2认同)