可重入鎖的學習
阿新 • • 發佈:2021-01-31
java和Go在可重入鎖上的對比
面試提到有關go是如何實現可重入鎖的,都不太記得go有這個,記錄下
-
可重入鎖的概念:指的是同一個執行緒外層函式獲得鎖之後,內層遞迴函式仍然能獲取該鎖的程式碼,在同一個執行緒在外層方法獲取鎖的時候,在進入內層方法會自動獲取鎖。
-
java的可重入鎖:Java直接展示結果,是可以執行的,類似的程式碼結構在golang中會出現 競爭異常(java的synchronized也是可重入結構)
-
go的鎖是否是可重入的
type Reentrant struct { sync.Mutex } func (receiver *
-
go實習一個簡單的可重入鎖
關於可重入鎖的原理,需要儲存的資訊包括鎖定狀態(需要注意狀態設定的原子性),持有鎖的執行緒,以及重入的次數,其中針對go來說獲取執行緒編號存在問題import ( "fmt" "runtime" "strconv" "strings" "sync" "sync/atomic" ) type MyReentrantLock struct { lock sync.Mutex id int counter int32