zoukankan      html  css  js  c++  java
  • rust interior mutability

    • Cell: 可以改变值, 不需要 mut 修饰 (inherited mutability).
      • let x = Cell:new(100); x.set(10);
      • 有些时候必须要使用 interior mutability, 比如 Rc::Clone 时修改引用计数.
    • RefCell: 运行时 borrow checker, 将编译时静态的 borrow check 延迟到运行时.
      • Ref: RefCell 借用引用的 wrapper, 其生命周期不能超过 RefCell
      • RefMut: mut 引用 wrapper.
    • Mutex/RwLock: 线程安全实现 interior mutability.
      • let x = Mutex::new(100); let mut r = x.lock().unwrap(); *r = 20;
    fn t() -> () {
        let x = std::cell::Cell::new(100);
        x.set(10);
    
        println!("{:?}", x); // Cell { value: 10 }
    
        let x = std::sync::Mutex::new(100);
        {
            let mut r = x.lock().unwrap();
            *r = 20;
        }
        {
            let mut r2 = x.lock().unwrap();
            *r2 = 200;
            println!("{:?}", x); // Mutex { data: <locked> }
        }
    
        println!("{:?}", x); // Mutex { data: 200 }
    
        let x = std::cell::RefCell::new(0);
    
        let w = x.borrow_mut();
        // let r = x.borrow(); // panicked at 'already mutably borrowed: BorrowError'
    }
    
  • 相关阅读:
    利用ssh传输文件
    linux 终端常用快捷键
    ubuntu 下关闭apache服务自动启动
    linux ps命令介绍
    virtualenv 使用
    startuml 2.6注册
    三代组装小基因组研究综述
    畅想未来的测序
    测序简史
    纳米孔测序技术介绍
  • 原文地址:https://www.cnblogs.com/wbin91/p/14292859.html
Copyright © 2011-2022 走看看