【发布时间】:2020-07-31 21:44:16
【问题描述】:
我想让我的程序更高效:
我可以将*sync.Mutex 变量赋予一个结构,这样当我执行obj.Mutex.Lock() 时,它只会锁定该特定对象上的goroutines 操作吗?
示例:
package main
import (
"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)
}
【问题讨论】:
标签: go struct locking mutex goroutine