[][src]Function tao_of_rust::ch03::tag_trait::sync_send_trait

pub fn sync_send_trait()

用作标签的trait:Sync / Send

Base usage: error 利用所有权机制化解了一次并发危机

use std::thread;
let mut x = vec![1, 2, 3, 4];
thread::spawn(|| {  // Error: may outlive borrowed value `x`
    x.push(1); // 子线程修改x
});
x.push(2); // 父线程修改xRun

Base usage: right 使用move关键字,

use std::thread;
let mut x = vec![1, 2, 3, 4];
thread::spawn(move || { // x实现了Sync和Send
    x.push(1);
});
//x.push(2); // 父线程不允许修改xRun

Base usage: 未实现Sync和Send的类型示范

use std::thread;
use std::rc::Rc;

let x = Rc::new(vec![1, 2, 3, 4]);
thread::spawn( move || { // Error: std::marker::Send is not satisfied
    x[1];
});Run