<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Atomic on Chen Shungen</title><link>https://chenshungen.cn/tags/atomic/</link><description>Recent content in Atomic on Chen Shungen</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 20 Apr 2026 13:30:00 +0800</lastBuildDate><atom:link href="https://chenshungen.cn/tags/atomic/index.xml" rel="self" type="application/rss+xml"/><item><title>Go 并发原语 - atomic</title><link>https://chenshungen.cn/blog/golang-concurrency/golang-atomic/</link><pubDate>Mon, 20 Apr 2026 13:30:00 +0800</pubDate><guid>https://chenshungen.cn/blog/golang-concurrency/golang-atomic/</guid><description>&lt;p>前面讲 Mutex、WaitGroup 等并发原语的实现时，你会发现它们的底层都依赖 &lt;code>sync/atomic&lt;/code> 包的原子操作。原子操作是并发编程的最底层基石——比锁更轻量、比 Channel 更快，适合特定场景下的高性能并发控制。这一篇我们专门来讲 atomic。&lt;/p>
&lt;h2 id="一什么是原子操作">一、什么是原子操作？&lt;/h2>
&lt;p>原子操作是指 &lt;strong>不会被中断的操作&lt;/strong>。在其他 goroutine 看来，原子操作要么已经完成，要么还没开始，不会看到&amp;quot;执行了一半&amp;quot;的中间状态。&lt;/p>
&lt;div class="highlight-wrapper">
 &lt;button class="copy-code-btn" type="button" aria-label="Copy code to clipboard">
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
 &lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2">&lt;/rect>
 &lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">&lt;/path>
 &lt;/svg>
 &lt;span class="copy-text">Copy&lt;/span>
 &lt;/button>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">普通操作（count++，三步）： 原子操作（atomic.AddInt64，一步）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> goroutine A goroutine B goroutine A goroutine B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 读取 count=5 │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ 读取 count=5 │ AddInt64(+1) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ count=5+1=6 │ │ (不可分割) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ 写回 count=6 │ count=5+1=6 │ │ AddInt64(+1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ 写回 count=6 │ │ (不可分割)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 结果：6（丢失一次+1）💀 结果：7（正确）✅&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;p>原子操作为什么能保证这一点？因为 CPU 硬件直接支持：&lt;/p></description></item></channel></rss>