亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以使用 *sync.Mutex 作為對象特定變量嗎?

我可以使用 *sync.Mutex 作為對象特定變量嗎?

Go
慕絲7291255 2022-06-01 10:03:42
我想讓我的程序更高效:我可以給*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 會同時訪問同一個結構值。


查看完整回答
反對 回復 2022-06-01
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號