<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>4 `Send` 与 `Sync` on 编程那些事儿</title><link>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/</link><description>Recent content in 4 `Send` 与 `Sync` on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2026 23:57:44 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/index.xml" rel="self" type="application/rss+xml"/><item><title>4.1 标记 Trait</title><link>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/01-marker-traits/</link><pubDate>Tue, 11 Aug 2026 11:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/01-marker-traits/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://google.github.io/comprehensive-rust/"&gt;Comprehensive Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://google.github.io/comprehensive-rust/concurrency/send-sync/marker-traits.html"&gt;https://google.github.io/comprehensive-rust/concurrency/send-sync/marker-traits.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="41-标记-trait"&gt;4.1 标记 Trait&lt;/h1&gt;
&lt;p&gt;Rust 如何禁止跨线程共享访问？答案在两个 trait 中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://doc.rust-lang.org/std/marker/trait.Send.html"&gt;&lt;code&gt;Send&lt;/code&gt;&lt;/a&gt;：若把 &lt;code&gt;T&lt;/code&gt; 移过线程边界是安全的，则类型 &lt;code&gt;T&lt;/code&gt; 是 &lt;code&gt;Send&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doc.rust-lang.org/std/marker/trait.Sync.html"&gt;&lt;code&gt;Sync&lt;/code&gt;&lt;/a&gt;：若把 &lt;code&gt;&amp;amp;T&lt;/code&gt; 移过线程边界是安全的，则类型 &lt;code&gt;T&lt;/code&gt; 是 &lt;code&gt;Sync&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Send&lt;/code&gt; 与 &lt;code&gt;Sync&lt;/code&gt; 是 &lt;a href="../../unsafe-rust/unsafe-traits.md"&gt;unsafe trait&lt;/a&gt;。只要类型只包含 &lt;code&gt;Send&lt;/code&gt; 与 &lt;code&gt;Sync&lt;/code&gt; 类型，编译器会自动为你派生它们。在你知道这样做有效时，也可以手动实现它们。&lt;/p&gt;</description></item><item><title>4.2 `Send`</title><link>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/02-send/</link><pubDate>Tue, 11 Aug 2026 11:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/02-send/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://google.github.io/comprehensive-rust/"&gt;Comprehensive Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://google.github.io/comprehensive-rust/concurrency/send-sync/send.html"&gt;https://google.github.io/comprehensive-rust/concurrency/send-sync/send.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="42-send"&gt;4.2 &lt;code&gt;Send&lt;/code&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;若把 &lt;code&gt;T&lt;/code&gt; 值移到另一线程是安全的，则类型 &lt;code&gt;T&lt;/code&gt; 是 &lt;a href="https://doc.rust-lang.org/std/marker/trait.Send.html"&gt;&lt;code&gt;Send&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;把所有权移到另一线程的效果是：&lt;em&gt;析构函数&lt;/em&gt;会在那个线程中运行。因此问题是：何时可以在一个线程中分配值，而在另一个线程中释放它。&lt;/p&gt;</description></item><item><title>4.3 `Sync`</title><link>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/03-sync/</link><pubDate>Tue, 11 Aug 2026 11:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/03-sync/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://google.github.io/comprehensive-rust/"&gt;Comprehensive Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://google.github.io/comprehensive-rust/concurrency/send-sync/sync.html"&gt;https://google.github.io/comprehensive-rust/concurrency/send-sync/sync.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="43-sync"&gt;4.3 &lt;code&gt;Sync&lt;/code&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;若同时从多个线程访问 &lt;code&gt;T&lt;/code&gt; 值是安全的，则类型 &lt;code&gt;T&lt;/code&gt; 是 &lt;a href="https://doc.rust-lang.org/std/marker/trait.Sync.html"&gt;&lt;code&gt;Sync&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;更精确的定义是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;T&lt;/code&gt; 是 &lt;code&gt;Sync&lt;/code&gt;，当且仅当 &lt;code&gt;&amp;amp;T&lt;/code&gt; 是 &lt;code&gt;Send&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;这句话本质上是在简短说明：若某类型对共享使用是线程安全的，那么跨线程传递它的引用也是线程安全的。&lt;/p&gt;</description></item><item><title>4.4 示例</title><link>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/04-examples/</link><pubDate>Tue, 11 Aug 2026 11:30:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/comprehensiveRust/concurrency-morning/send-sync/04-examples/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://google.github.io/comprehensive-rust/"&gt;Comprehensive Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://google.github.io/comprehensive-rust/concurrency/send-sync/examples.html"&gt;https://google.github.io/comprehensive-rust/concurrency/send-sync/examples.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="44-示例"&gt;4.4 示例&lt;/h1&gt;
&lt;h2 id="send--sync"&gt;&lt;code&gt;Send + Sync&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;你遇到的多数类型都是 &lt;code&gt;Send + Sync&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;i8&lt;/code&gt;、&lt;code&gt;f32&lt;/code&gt;、&lt;code&gt;bool&lt;/code&gt;、&lt;code&gt;char&lt;/code&gt;、&lt;code&gt;&amp;amp;str&lt;/code&gt;、…&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(T1, T2)&lt;/code&gt;、&lt;code&gt;[T; N]&lt;/code&gt;、&lt;code&gt;&amp;amp;[T]&lt;/code&gt;、&lt;code&gt;struct { x: T }&lt;/code&gt;、…&lt;/li&gt;
&lt;li&gt;&lt;code&gt;String&lt;/code&gt;、&lt;code&gt;Option&amp;lt;T&amp;gt;&lt;/code&gt;、&lt;code&gt;Vec&amp;lt;T&amp;gt;&lt;/code&gt;、&lt;code&gt;Box&amp;lt;T&amp;gt;&lt;/code&gt;、…&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Arc&amp;lt;T&amp;gt;&lt;/code&gt;：通过原子引用计数显式线程安全。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Mutex&amp;lt;T&amp;gt;&lt;/code&gt;：通过内部加锁显式线程安全。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mpsc::Sender&amp;lt;T&amp;gt;&lt;/code&gt;：自 1.72.0 起。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AtomicBool&lt;/code&gt;、&lt;code&gt;AtomicU8&lt;/code&gt;、…：使用特殊的原子指令。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;泛型类型通常在类型参数是 &lt;code&gt;Send + Sync&lt;/code&gt; 时也是 &lt;code&gt;Send + Sync&lt;/code&gt;。&lt;/p&gt;</description></item></channel></rss>