Rust并发

Rust并发

简介

线程

线程同步

互斥量

原子量

Send和Sync

std::marker 中的 SyncSend

Send

  • Send允许在线程间转移所有权;

  • Send 标记 trait 表明类型的所有权可以在线程间传递。

  • 几乎所有的 Rust 类型都是Send 的, 裸指针除外;

  • 任何完全由 Send 的类型组成的类型也会自动被标记为 Send

  • Rc<T>没有实现send trait,无法用于线程共享,需用Arc<T>

Sync

  • Sync允许在线程间共享所有权;

  • 实现了 Sync 的类型可以安全的在多个线程中拥有其值的引用;

  • 对于任意类型 T,如果 &TT 的引用)是 Send 的话, T 就是 Sync 的;

  • 基本类型是 Sync 的;

  • 完全由 Sync 的类型组成的类型也是 Sync 的;

  • 实现Send的类型可以在线程间安全的传递其所有权;

  • 实现Sync的类型可以在线程间安全的共享(通过引用);

  • 若类型 T 的引用&TSend,则TSync

  • Send: 将计算中的传递数据抽象到另一个并发计算 (我们称其为接收方),而对于发送方,将无法再次访问它;

  • Sync: 在程序的两个并发部分之间共享数据;

一个类型要在线程间安全的共享的前提是,指向它的引用必须能在线程间传递。因为如果引用都不能被传递,我们就无法在多个线程间使用引用去访问同一个数据了。

参考

  1. Rust标准库中的原子类型 | Rust学习笔记

updatedupdated2024-05-102024-05-10