欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > go--互斥锁

go--互斥锁

2024/10/24 8:32:45 来源:https://blog.csdn.net/weixin_63566388/article/details/140634002  浏览:    关键词:go--互斥锁

Go 标准库中提供了 sync.Mutex 互斥锁类型及其两个方法:

  • Lock
  • Unlock

可以通过在代码前调用 Lock 方法,在代码后调用 Unlock 方法来保证一段代码的互斥执行。参见 Inc 方法。也可以用 defer 语句来保证互斥锁一定会被解锁。

package mainimport ("fmt""sync""time"
)// SafeCounter 是并发安全的
type SafeCounter struct {mu sync.Mutexv  map[string]int
}// Inc 对给定键的计数加一
func (c *SafeCounter) Inc(key string) {c.mu.Lock()// 锁定使得一次只有一个 Go 协程可以访问映射 c.v。c.v[key]++c.mu.Unlock()
}// Value 返回给定键的计数的当前值。
func (c *SafeCounter) Value(key string) int {c.mu.Lock()// 锁定使得一次只有一个 Go 协程可以访问映射 c.v。defer c.mu.Unlock()return c.v[key]
}func main() {c := SafeCounter{v: make(map[string]int)}for i := 0; i < 1000; i++ {go c.Inc("somekey")}time.Sleep(time.Second)fmt.Println(c.Value("somekey"))
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com