Rust中Arc类型

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

Arc共享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类型)