美文网首页Rust语言
Rust中Arc<T>类型

Rust中Arc<T>类型

作者: 新高_Butland | 来源:发表于2017-11-02 14:36 被阅读16次

    如何线程间的安全使用同一对象,Arc<T> 提供了一个不错的方案。

    Arc<T>共享T的所有权,同一堆空间。调用clone后,产生一个新指针指向这个堆空间中的同一个值。

    当给定值最后一个Arc指针销毁后,这堆内存也将被回收。

    默认情况下共享引用是不允许mut的,如何想mut可以考虑使用Mutex,RwLock

    下面是一个Mutex与Arc的使用例子

    use std::sync::{Arc, Mutex};

    use std::thread;

    use std::sync::mpsc::channel;

    const N: usize = 10;

    let data = Arc::new(Mutex::new(0));

    let (tx, rx) = channel();

    for _ in 0..N {

          let (data, tx) = (data.clone(), tx.clone());

          thread::spawn(move || {

                let mut data = data.lock().unwrap();

                *data += 1;

                 if *data == N {

                       tx.send(()).unwrap();

                 }

           });

    }

    rx.recv().unwrap();

    相关文章

      网友评论

        本文标题:Rust中Arc<T>类型

        本文链接:https://www.haomeiwen.com/subject/bjlgpxtx.html