1. RWMutex,讀寫鎖,又稱讀/寫互斥鎖。
讀寫鎖是把對共享資源的"讀操作"和"寫操作"分別對待。
相比於互斥鎖,讀寫鎖可以實現更細緻的訪問控制。
2. sync.RWMutex的類型和方法。
一個讀寫鎖中包含兩個鎖,讀鎖和寫鎖。
sync.RWMutex類型中的Lock方法和Unlock方法,分別用於對寫鎖進行鎖定和解鎖。
而sync.RWMutex類型的RLock方法和RUnlock方法,分別用於對讀鎖進行鎖定和解鎖。
3. 使用讀/寫互斥鎖的規則
a. 在寫鎖已被鎖定的情況下,再試圖鎖定寫鎖,會阻塞當前的goroutine。
b. 在寫鎖已被鎖定的情況下,試圖鎖定讀鎖,也會阻塞當前的goroutine。
c. 在讀鎖已被鎖定的情況下,試圖鎖定寫鎖,會阻塞當前的goroutine。
d. 在讀鎖已被鎖定的情況下,再試圖鎖定讀鎖,並不會阻塞當前的goroutine。
對於某個受到讀寫鎖保護的共享資源,多個寫操作不能同時進行,
寫操作和讀操作,也不能同時進行,但多個讀操作卻可以同時進行。
解鎖"讀寫鎖中未被鎖定的寫鎖",會立即引發panic。對於讀鎖也是如此。
並且此種panic是不可恢復的。
參考來源:
郝林-Go语言核心36讲
https://github.com/hyper0x/Golang_Puzzlers
https://golang.org/pkg/cmd/go/internal/test/