我想让我的程序更高效:
我可以给*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)
}
繁华开满天机
相关分类