<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 內存同步 對于一個共享變量的并發操作,寫加鎖可以理解,是為了避免數據競爭.那么為什么讀的時候也要加鎖呢? 1. Balance不會在其它操作比如Withdraw“中間”執行。 2. 是“同步”不僅僅是一堆goroutine執行順序的問題,同樣也會涉及到內存的問題。 ## 現代計算機構造 現在很多計算是多核的,而多個協程是可能會運行在不同核心上面的,而每個核心都是有本地緩存的,為了提升效率,對內存的寫入一般會在每一個處理器中緩沖,并在必要時一起flush到主存. **在一個獨立的goroutine中,每一個語句的執行順序是可以被保證的**(我理解這里的順序是指沒有共享變量的情況下),也就是說goroutine內順序是連貫的。但是在不使用channel且不使用mutex這樣的顯式同步操作時,我們就沒法保證事件在不同的goroutine中看到的執行順序是一致的了。 ## 例子 ~~~ var x, y int go func() { x = 1 // A1 fmt.Print("y:", y, " ") // A2 }() go func() { y = 1 // B1 fmt.Print("x:", x, " ") // B2 }() ~~~ 這里的邏輯我們捋一下,加入第一個協程先執行了,那么第二個協程肯定能打印出x=1,假如第二個協程先執行了,第一個協程肯定能打印出y=1. x,y都打印出0的可能只有: **因為賦值和打印指向不同的變量,編譯器可能會斷定兩條語句的順序不會影響執行結果,并且會交換兩個語句的執行順序。如果兩個goroutine在不同的CPU上執行,每一個核心有自己的緩存,這樣一個goroutine的寫入對于其它goroutine的Print,在主存同步之前就是不可見的了。** 有可能會打印出: ~~~ x:0 y:0 y:0 x:0 ~~~ 也就是說在一個協程中,賦值操作,在print之后去執行了.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看