<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國際加速解決方案。 廣告
                2、讀寫鎖 (用于讀取多,寫入少的操作應用) ~~~ type RWMutex func (rw *RWMutex) Lock() func (rw *RWMutex) RLock() func (rw *RWMutex) RLocker() Locker func (rw *RWMutex) RUnlock() func (rw *RWMutex) Unlock() ~~~ RWMutex是一個讀寫鎖,該鎖可以加多個讀鎖或者一個寫鎖,其經常用于讀次數遠遠多于寫次數的場景. func (rw *RWMutex) Lock()  寫鎖,如果在添加寫鎖之前已經有其他的讀鎖和寫鎖,則lock就會阻塞直到該鎖可用,為確保該鎖最終可用,已阻塞的 Lock 調用會從獲得的鎖中排除新的讀取器,即寫鎖權限高于讀鎖,有寫鎖時優先進行寫鎖定 func (rw *RWMutex) Unlock() 寫鎖解鎖,如果沒有進行寫鎖定,則就會引起一個運行時錯誤 func (rw *RWMutex) RLock() 讀鎖,當有寫鎖時,無法加載讀鎖,當只有讀鎖或者沒有鎖時,可以加載讀鎖,讀鎖可以加載多個,所以適用于"讀多寫少"的場景 func (rw *RWMutex)RUnlock() 讀鎖解鎖,RUnlock 撤銷單次RLock 調用,它對于其它同時存在的讀取器則沒有效果。若 rw 并沒有為讀取而鎖定,調用 RUnlock 就會引發一個運行時錯誤(注:這種說法在go1.3版本中是不對的,例如下面這個例子)。 讀寫鎖的寫鎖只能鎖定一次,解鎖前不能多次鎖定,讀鎖可以多次,但讀解鎖次數最多只能比讀鎖次數多一次,一般情況下我們不建議讀解鎖次數多余讀鎖次數。 讀多寫少的情況,用讀寫鎖, 攜程同時在操作讀。 ~~~ package main import ( "fmt" "math/rand" "sync" "time" ) //讀寫鎖 var rwLock sync.RWMutex func testRWLock() { var a map[int]int a = make(map[int]int, 5) a[8] = 10 a[3] = 10 a[2] = 10 a[1] = 10 a[18] = 10 for i := 0; i < 2; i++ { go func(b map[int]int) { rwLock.Lock() b[8] = rand.Intn(100) rwLock.Unlock() }(a) } for i := 0; i < 10; i++ { go func(b map[int]int) { rwLock.RLock() //讀鎖 fmt.Println(a) rwLock.RUnlock() }(a) } time.Sleep(time.Second * 2) } func main() { testRWLock() //讀多寫少的時候,用讀寫鎖 } ~~~ 輸出結果: ~~~ map[3:10 2:10 1:10 18:10 8:81] map[8:87 3:10 2:10 1:10 18:10] map[2:10 1:10 18:10 8:87 3:10] map[2:10 1:10 18:10 8:87 3:10] map[8:87 3:10 2:10 1:10 18:10] map[8:87 3:10 2:10 1:10 18:10] map[2:10 1:10 18:10 8:87 3:10] map[8:87 3:10 2:10 1:10 18:10] map[1:10 18:10 8:87 3:10 2:10] map[8:87 3:10 2:10 1:10 18:10] ~~~
                  <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>

                              哎呀哎呀视频在线观看