需要关于Rust细胞和参考计数types的整体解释
我迷失在std::cell模块中的types。 我也试图理解Rust中引用计数的包装,比如Rc和Arc 。 
 据我了解,这是提供进一步的可能性比简单的参考包装。 虽然我理解基础知识( RefCell给出了“dynamic借用”,而Rc在C ++中就像shared_ptr一样),但我仍然无法看到整个图像。 
  Rc和Arc什么联系? 细胞和参考计数的家庭提供正交function? 
Rust中有两个基本概念:
- 所有权,
- 可变性。
 各种指针types( Box , Rc , Arc )都与拥有权有关:它们允许控制单个对象是否有单个或多个所有者。 
 另一方面,各种细胞( Cell , RefCell , Mutex , RwLock , AtomicXXX )都与可变性有关。 
Rust安全的创立规则是别名XOR Mutability 。 也就是说,如果没有对其内部的未完成引用,则只能安全地进行变异。
这个规则通常在编译时由借用检查器强制执行:
-  如果你有一个&T,你也不能在同一个对象的范围内有一个&mut T,
-  如果你有一个&mut T,你也不能在范围内引用同一个对象。
但是,有时候这还不够灵活。 有时你需要(或想要)具有对同一个对象的多个引用并且对其进行变异的能力。 input单元格 。
  Cell和RefCell的想法是在受到混淆的情况下以受控方式允许可变性: 
-   Cell防止形成其内部的参考,避免悬挂参考,
-   RefCell将混叠XOR可变性的实施从编译时间转移到运行时间。
 这个function有时被描述为提供内部可变性 ,也就是说,从外部( &T )看起来不可变的对象实际上可以被突变。 
 当这个可变性扩展到多个线程时,您将使用Mutex , RwLock或AtomicXXX ; 他们提供相同的function: 
-   AtomicXXX只是Cell:没有参考的内部,只是进出/
-   RwLock只是RefCell:通过卫兵可以获得内部的引用,
-   Mutex是RwLock的简化版本,它不区分只读保护和写保护; 所以在概念上类似于仅具有borrow_mut方法的borrow_mut。
如果你来自C ++的背景:
-   Box是unique_ptr,
-   Arc是shared_ptr,
-   Rc是shared_ptr的非线程安全版本。
 单元提供了类似于mutablefunction,除了额外的保证来避免别名问题。 把Cell看作是std::atomic , RefCell是std::shared_mutex的非线程安全版本(如果发生locking,则抛出而不是阻塞)。