我想讓我的程序更高效:我可以給*sync.Mutex一個結構變量一個變量,以便當我執行obj.Mutex.Lock()它時它只是鎖定該特定對象上的 goroutines 操作?例子:package mainimport ( "fmt" "sync" "time")type mystruct struct { Counter int Mutex *sync.Mutex}func (obj *mystruct) incrementCount() { for i := 0; i < 1000; i++ { obj.Mutex.Lock() obj.Counter++ time.Sleep(time.Microsecond) obj.Mutex.Unlock() } fmt.Println("incrementCount returns")}func funcNotSensibleToMutex() { n := 0 for i := 0; i < 1000; i++ { n++ time.Sleep(time.Microsecond) } fmt.Println("returns first since it's not affected by mutex")}func main() { a := &mystruct{0, &sync.Mutex{}} go a.incrementCount() go a.incrementCount() go funcNotSensibleToMutex() time.Sleep(time.Duration(5) * time.Second) fmt.Println("a counter", a.Counter)}
1 回答

繁華開滿天機
TA貢獻1816條經驗 獲得超4個贊
因為每當我在任何互斥體上設置鎖定時,所有變量都被鎖定?
那沒有任何意義?;コ怏w保持鎖定狀態。調用它的Lock()
和Unlock()
方法會根據它的狀態來同步 goroutines。單獨的互斥量值具有單獨的不同狀態。
將互斥鎖添加到結構中是完全正常和常見的,您甚至可以將其嵌入:您何時將互斥鎖嵌入到 Go 中的結構中?效果如您所愿:互斥鎖可用于保護對包含結構值的并發訪問,但不影響其他結構值。2 個并發的 goroutine 可能會更新 2 個單獨的結構值,但不會超過 1 個 goroutine 會同時訪問同一個結構值。
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消