Go Mutex(互斥锁)

使用Go当编写高并发应用时,没有避免你写一个系统会有竞态条件(race conditions)。

竞态条件会导致系统难以预料的问题,难以调试,有时更难修复。

所以我们要能写Go程序执行并发以一种安全的方式,而不影响性能。

这就是mutex产生作用的时候。

mutex或者是mutual exclusion是一种机制,允许我们防止并发进入一个数据关键区域,在它已经被一个执行的进程执行。

假设有一个例子,有一个银行账户系统,存款和取款都从这个账户中。

在一个线程中,同步程序,将会是难以置信的简单。

我们可以高效的保证将如期望中工作,通过单元测试。

 如果引进了多线程时,在Go的情况是多个goroutines,将会在代码中看到问题。

锁,或者是mutex。是一个异步技术和重要的并发编程概念。

假如你在写一个Go程序,有超过一个线程或者goroutine并发执行。

这些goroutines在之间共享变量,你想要确保一次只有一个goroutine访问变量来避免冲突。

这时可以使用mutexes。

mutex提供资源的互斥,这意味着一次只能有一个goroutine持有它。

任何的goroutine必须先获得mutex,接着访问资源。如果一个goroutine尝试获得一个已经被另一个goroutine持有的mutex,它将被阻塞并且等待mutex被释放。

Go标准库用 sync.Mutex提供了互斥,和两个方法:

Lock 和 Unlock。

m.Lock():  锁住mutex m。如果锁已经在使用,调用goroutine阻塞直到mutex可用。

m.Unlock():  解锁mutex m。如果m没有已经被锁住,抛出一个运行时错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值