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

What's the difference between atomic reference counting and automatic reference counting?

我看到 ARC 是一个不时使用的首字母缩略词,但例如在 Rust 中它是 "atomic reference counting",而在 Swift 或 ObjC 中他们称之为 "automatic reference counting"。到底有什么区别?据我所知,它们的行为方式似乎相同。

这实际上...完全不同。


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

  • Rc 是最基本的引用计数指针:克隆它只会增加一个计数器,当指向特定数据的最后一个 Rc 被删除时,计数器就会下降到 0,那条数据也被丢弃了。
  • Arc是它的原子版本,这意味着它是线程安全的,可以跨线程共享(不像Rc)。

在Swift这边,ARC指的是Automatic Reference Counting,Swift的Garbage Collection机制顾名思义是自动的(在代码中是不可见的)。