05-Send 和 Sync

Send 和 Sync — Rust By Practice

内容来源 · Rust By Practice / Rust 语言实战

原文链接: https://practice-rust.beatai.org/threads/send-sync.html

Send 和 Sync

Send 表示类型可以安全地在线程间转移所有权;Sync 表示类型可以安全地在线程间共享引用。

  1. 🌟
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 以下代码能否编译?若不能,说明原因并修复
use std::thread;

fn main() {
    let v = vec![1, 2, 3];
    let handle = thread::spawn(move || {
        println!("{:?}", v);
    });
    handle.join().unwrap();
    println!("Success!");
}
  1. 🌟🌟
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 让代码工作:`Rc` 不是 `Send`,应改用 `Arc`
use std::sync::Arc;
use std::thread;

fn main() {
    let data = Arc::new(5);
    let data2 = Arc::clone(&data);

    let handle = thread::spawn(move || {
        println!("{}", data2);
    });

    handle.join().unwrap();
    println!("{}", data);
    println!("Success!");
}
  1. 🌟🌟
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 填空:`Mutex` 保护的类型是 `Sync` 的
use std::sync::{Arc, Mutex};
use std::thread;

fn is_send<T: Send>() {}
fn is_sync<T: Sync>() {}

fn main() {
    is_send::<Arc<Mutex<i32>>>();
    is_sync::<Arc<__>>();
    println!("Success!");
}

你可以在这里找到答案(在 solutions 路径下),但请只在需要时使用

最后修改 August 23, 2026: 更新 (499855b16)