<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Go 互斥 上面的例子中,我們看過了如何在多個協程之間原子地訪問計數器,對于更復雜的例子,我們可以使用`Mutex`來在多個協程之間安全地訪問數據。 ```go package main import ( "fmt" "math/rand" "runtime" "sync" "sync/atomic" "time" ) func main() { // 這個例子的狀態就是一個map var state = make(map[int]int) // 這個`mutex`將同步對狀態的訪問 var mutex = &sync.Mutex{} // ops將對狀態的操作進行計數 var ops int64 = 0 // 這里我們啟動100個協程來不斷地讀取這個狀態 for r := 0; r < 100; r++ { go func() { total := 0 for { // 對于每次讀取,我們選取一個key來訪問, // mutex的`Lock`函數用來保證對狀態的 // 唯一性訪問,訪問結束后,使用`Unlock` // 來解鎖,然后增加ops計數器 key := rand.Intn(5) mutex.Lock() total += state[key] mutex.Unlock() atomic.AddInt64(&ops, 1) // 為了保證這個協程不會讓調度器出于饑餓狀態, // 我們顯式地使用`runtime.Gosched`釋放了資源 // 控制權,這種控制權會在通道操作結束或者 // time.Sleep結束后自動釋放。但是這里我們需要 // 手動地釋放資源控制權 runtime.Gosched() } }() } // 同樣我們使用10個協程來模擬寫狀態 for w := 0; w < 10; w++ { go func() { for { key := rand.Intn(5) val := rand.Intn(100) mutex.Lock() state[key] = val mutex.Unlock() atomic.AddInt64(&ops, 1) runtime.Gosched() } }() } // 主協程Sleep,讓那10個協程能夠運行一段時間 time.Sleep(time.Second) // 輸出總操作次數 opsFinal := atomic.LoadInt64(&ops) fmt.Println("ops:", opsFinal) // 最后鎖定并輸出狀態 mutex.Lock() fmt.Println("state:", state) mutex.Unlock() } ``` 運行結果 ```go ops: 3931611 state: map[0:84 2:20 3:18 1:65 4:31] ```
                  <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>

                              哎呀哎呀视频在线观看